src

package
v0.0.0-...-6e9a4a7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2024 License: GPL-3.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DeletedHead = Head{
	// contains filtered or unexported fields
}
View Source
var Qualities = []Quality{P240, P360, P480, P720, P1080, P1440, P4k, P8k}

Purposfully removing Original from this list (since it require special treatments anyways)

View Source
var Settings = SettingsT{
	Outpath:     GetEnvOr("GOCODER_CACHE_ROOT", "/cache"),
	Metadata:    GetEnvOr("GOCODER_METADATA_ROOT", "/metadata"),
	RoutePrefix: GetEnvOr("GOCODER_PREFIX", ""),
	HwAccel:     DetectHardwareAccel(),
}
View Source
var SubtitleExtensions = map[string]string{
	"subrip": "srt",
	"ass":    "ass",
	"vtt":    "vtt",
}

Functions

func Abs

func Abs(x int32) int32

func Extract

func Extract(path string, sha string) (<-chan struct{}, error)

func ExtractThumbnail

func ExtractThumbnail(path string, sha string) (string, error)

func GetEnvOr

func GetEnvOr(env string, def string) string

func GetMimeCodec

func GetMimeCodec(mi *mediainfo.File, kind mediainfo.StreamKind, i int) *string

convert mediainfo to RFC 6381, waiting for either of those tickets to be resolved:

https://sourceforge.net/p/mediainfo/feature-requests/499
https://trac.ffmpeg.org/ticket/6617

this code is addapted from https://github.com/jellyfin/jellyfin/blob/master/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs

func Map

func Map[T, U any](ts []T, f func(T, int) U) []U

func NewStream

func NewStream(file *FileStream, handle StreamHandle, ret *Stream)

func OrNull

func OrNull(str string) *string

func ParseFloat

func ParseFloat(str string) float32

func ParseTime

func ParseTime(str string) float32

func ParseUint

func ParseUint(str string) uint32

func ParseUint64

func ParseUint64(str string) uint64

Types

type Audio

type Audio struct {
	/// The index of this track on the media.
	Index uint32 `json:"index"`
	/// The title of the stream.
	Title *string `json:"title"`
	/// The language of this stream (as a ISO-639-2 language code)
	Language *string `json:"language"`
	/// The human readable codec name.
	Codec string `json:"codec"`
	/// The codec of this stream (defined as the RFC 6381).
	MimeCodec *string `json:"mimeCodec"`
	/// Is this stream the default one of it's type?
	IsDefault bool `json:"isDefault"`
	/// Is this stream tagged as forced? (useful only for subtitles)
	IsForced bool `json:"isForced"`
}

type AudioStream

type AudioStream struct {
	Stream
	// contains filtered or unexported fields
}

func NewAudioStream

func NewAudioStream(file *FileStream, idx int32) *AudioStream

type CMap

type CMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func NewCMap

func NewCMap[K comparable, V any]() CMap[K, V]

func (*CMap[K, V]) Get

func (m *CMap[K, V]) Get(key K) (V, bool)

func (*CMap[K, V]) GetAndRemove

func (m *CMap[K, V]) GetAndRemove(key K) (V, bool)

func (*CMap[K, V]) GetOrCreate

func (m *CMap[K, V]) GetOrCreate(key K, create func() V) (V, bool)

func (*CMap[K, V]) GetOrSet

func (m *CMap[K, V]) GetOrSet(key K, val V) (V, bool)

func (*CMap[K, V]) Remove

func (m *CMap[K, V]) Remove(key K)

func (*CMap[K, V]) Set

func (m *CMap[K, V]) Set(key K, val V)

type Chapter

type Chapter struct {
	/// The start time of the chapter (in second from the start of the episode).
	StartTime float32 `json:"startTime"`
	/// The end time of the chapter (in second from the start of the episode).
	EndTime float32 `json:"endTime"`
	/// The name of this chapter. This should be a human-readable name that could be presented to the user.
	Name string `json:"name"`
}

type ClientInfo

type ClientInfo struct {
	// contains filtered or unexported fields
}

type FileStream

type FileStream struct {
	Path      string
	Out       string
	Keyframes *Keyframe
	Info      *MediaInfo
	// contains filtered or unexported fields
}

func NewFileStream

func NewFileStream(path string, sha string) *FileStream

func (*FileStream) Destroy

func (fs *FileStream) Destroy()

func (*FileStream) GetAudioIndex

func (fs *FileStream) GetAudioIndex(audio int32) (string, error)

func (*FileStream) GetAudioSegment

func (fs *FileStream) GetAudioSegment(audio int32, segment int32) (string, error)

func (*FileStream) GetMaster

func (fs *FileStream) GetMaster() string

func (*FileStream) GetVideoIndex

func (fs *FileStream) GetVideoIndex(quality Quality) (string, error)

func (*FileStream) GetVideoSegment

func (fs *FileStream) GetVideoSegment(quality Quality, segment int32) (string, error)

func (*FileStream) Kill

func (fs *FileStream) Kill()

type Flags

type Flags int32
const (
	AudioF   Flags = 1 << 0
	VideoF   Flags = 1 << 1
	Transmux Flags = 1 << 3
)
type Head struct {
	// contains filtered or unexported fields
}

type HwAccelT

type HwAccelT struct {
	Name        string
	DecodeFlags []string
	EncodeFlags []string
	ScaleFilter string
}

func DetectHardwareAccel

func DetectHardwareAccel() HwAccelT

type Keyframe

type Keyframe struct {
	Sha         string
	Keyframes   []float64
	CanTransmux bool
	IsDone      bool
	// contains filtered or unexported fields
}

func GetKeyframes

func GetKeyframes(sha string, path string) *Keyframe

func (*Keyframe) AddListener

func (kf *Keyframe) AddListener(callback func(keyframes []float64))

func (*Keyframe) Get

func (kf *Keyframe) Get(idx int32) float64

func (*Keyframe) Length

func (kf *Keyframe) Length() (int32, bool)

func (*Keyframe) Slice

func (kf *Keyframe) Slice(start int32, end int32) []float64

type KeyframeInfo

type KeyframeInfo struct {
	// contains filtered or unexported fields
}

type MICache

type MICache struct {
	// contains filtered or unexported fields
}

type MediaInfo

type MediaInfo struct {
	// The sha1 of the video file.
	Sha string `json:"sha"`
	/// The internal path of the video file.
	Path string `json:"path"`
	/// The extension currently used to store this video file
	Extension string `json:"extension"`
	/// The whole mimetype (defined as the RFC 6381). ex: `video/mp4; codecs="avc1.640028, mp4a.40.2"`
	MimeCodec *string `json:"mimeCodec"`
	/// The file size of the video file.
	Size uint64 `json:"size"`
	/// The length of the media in seconds.
	Duration float32 `json:"duration"`
	/// The container of the video file of this episode.
	Container *string `json:"container"`
	/// The video codec and infromations.
	Video *Video `json:"video"`
	/// The list of videos if there are multiples.
	Videos []Video `json:"videos"`
	/// The list of audio tracks.
	Audios []Audio `json:"audios"`
	/// The list of subtitles tracks.
	Subtitles []Subtitle `json:"subtitles"`
	/// The list of fonts that can be used to display subtitles.
	Fonts []string `json:"fonts"`
	/// The list of chapters. See Chapter for more information.
	Chapters []Chapter `json:"chapters"`
}

func GetInfo

func GetInfo(path string, sha string) (*MediaInfo, error)

type Quality

type Quality string
const (
	P240     Quality = "240p"
	P360     Quality = "360p"
	P480     Quality = "480p"
	P720     Quality = "720p"
	P1080    Quality = "1080p"
	P1440    Quality = "1440p"
	P4k      Quality = "4k"
	P8k      Quality = "8k"
	Original Quality = "original"
)

func QualityFromHeight

func QualityFromHeight(height uint32) Quality

func QualityFromString

func QualityFromString(str string) (Quality, error)

func (Quality) AverageBitrate

func (v Quality) AverageBitrate() uint32

I'm not entierly sure about the values for bitrates. Double checking would be nice.

func (Quality) Height

func (q Quality) Height() uint32

func (Quality) MaxBitrate

func (v Quality) MaxBitrate() uint32

type Segment

type Segment struct {
	// contains filtered or unexported fields
}

type SettingsT

type SettingsT struct {
	Outpath     string
	Metadata    string
	RoutePrefix string
	HwAccel     HwAccelT
}

type Stream

type Stream struct {
	// contains filtered or unexported fields
}

func (*Stream) GetIndex

func (ts *Stream) GetIndex() (string, error)

func (*Stream) GetSegment

func (ts *Stream) GetSegment(segment int32) (string, error)

func (*Stream) Kill

func (ts *Stream) Kill()

func (*Stream) KillHead

func (ts *Stream) KillHead(encoder_id int)

Stream assume to be locked

type StreamHandle

type StreamHandle interface {
	// contains filtered or unexported methods
}

type Subtitle

type Subtitle struct {
	/// The index of this track on the media.
	Index uint32 `json:"index"`
	/// The title of the stream.
	Title *string `json:"title"`
	/// The language of this stream (as a ISO-639-2 language code)
	Language *string `json:"language"`
	/// The codec of this stream.
	Codec string `json:"codec"`
	/// The extension for the codec.
	Extension *string `json:"extension"`
	/// Is this stream the default one of it's type?
	IsDefault bool `json:"isDefault"`
	/// Is this stream tagged as forced? (useful only for subtitles)
	IsForced bool `json:"isForced"`
	/// The link to access this subtitle.
	Link *string `json:"link"`
}

type Thumbnail

type Thumbnail struct {
	// contains filtered or unexported fields
}

type Tracker

type Tracker struct {
	// contains filtered or unexported fields
}

func NewTracker

func NewTracker(t *Transcoder) *Tracker

func (*Tracker) DestroyStreamIfOld

func (t *Tracker) DestroyStreamIfOld(path string)

func (*Tracker) KillAudioIfDead

func (t *Tracker) KillAudioIfDead(path string, audio int32) bool

func (*Tracker) KillOrphanedHeads

func (t *Tracker) KillOrphanedHeads(path string, quality *Quality, audio int32)

func (*Tracker) KillQualityIfDead

func (t *Tracker) KillQualityIfDead(path string, quality Quality) bool

func (*Tracker) KillStreamIfDead

func (t *Tracker) KillStreamIfDead(path string) bool

type Transcoder

type Transcoder struct {
	// contains filtered or unexported fields
}

func NewTranscoder

func NewTranscoder() (*Transcoder, error)

func (*Transcoder) GetAudioIndex

func (t *Transcoder) GetAudioIndex(
	path string,
	audio int32,
	client string,
	sha string,
) (string, error)

func (*Transcoder) GetAudioSegment

func (t *Transcoder) GetAudioSegment(
	path string,
	audio int32,
	segment int32,
	client string,
	sha string,
) (string, error)

func (*Transcoder) GetMaster

func (t *Transcoder) GetMaster(path string, client string, sha string) (string, error)

func (*Transcoder) GetVideoIndex

func (t *Transcoder) GetVideoIndex(
	path string,
	quality Quality,
	client string,
	sha string,
) (string, error)

func (*Transcoder) GetVideoSegment

func (t *Transcoder) GetVideoSegment(
	path string,
	quality Quality,
	segment int32,
	client string,
	sha string,
) (string, error)

type Video

type Video struct {
	/// The human readable codec name.
	Codec string `json:"codec"`
	/// The codec of this stream (defined as the RFC 6381).
	MimeCodec *string `json:"mimeCodec"`
	/// The language of this stream (as a ISO-639-2 language code)
	Language *string `json:"language"`
	/// The max quality of this video track.
	Quality Quality `json:"quality"`
	/// The width of the video stream
	Width uint32 `json:"width"`
	/// The height of the video stream
	Height uint32 `json:"height"`
	/// The average bitrate of the video in bytes/s
	Bitrate uint32 `json:"bitrate"`
}

type VideoStream

type VideoStream struct {
	Stream
	// contains filtered or unexported fields
}

func NewVideoStream

func NewVideoStream(file *FileStream, quality Quality) *VideoStream

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL