mirror of
https://github.com/datarhei/core.git
synced 2025-09-27 04:16:25 +08:00

Commits (Ingo Oppermann): - Add experimental SRT connection stats and logs - Hide /config/reload endpoint in reade-only mode - Add SRT server - Create v16 in go.mod - Fix data races, tests, lint, and update dependencies - Add trailing slash for routed directories (datarhei/restreamer#340) - Allow relative URLs in content in static routes Co-Authored-By: Ingo Oppermann <57445+ioppermann@users.noreply.github.com>
218 lines
5.9 KiB
Go
218 lines
5.9 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/datarhei/core/v16/ffmpeg/skills"
|
|
)
|
|
|
|
// SkillsFilter represents an ffmpeg filter
|
|
type SkillsFilter struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// Unmarshal converts a skills filter to its API representation
|
|
func (s *SkillsFilter) Unmarshal(filter skills.Filter) {
|
|
s.ID = filter.Id
|
|
s.Name = filter.Name
|
|
}
|
|
|
|
// SkillsHWAccel represents an ffmpeg HW accelerator
|
|
type SkillsHWAccel struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// Unmarshal converts a skills HWAccel to its API representation
|
|
func (s *SkillsHWAccel) Unmarshal(hwaccel skills.HWAccel) {
|
|
s.ID = hwaccel.Id
|
|
s.Name = hwaccel.Name
|
|
}
|
|
|
|
// SkillsCodec represents an ffmpeg codec
|
|
type SkillsCodec struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Encoders []string `json:"encoders"`
|
|
Decoders []string `json:"decoders"`
|
|
}
|
|
|
|
// Unmarshal converts a skills codec to its API representation
|
|
func (s *SkillsCodec) Unmarshal(codec skills.Codec) {
|
|
s.ID = codec.Id
|
|
s.Name = codec.Name
|
|
s.Encoders = codec.Encoders
|
|
s.Decoders = codec.Decoders
|
|
}
|
|
|
|
// SkillsHWDevice represents an ffmpeg hardware device
|
|
type SkillsHWDevice struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Extra string `json:"extra"`
|
|
Media string `json:"media"`
|
|
}
|
|
|
|
// Unmarshal converts a skills HW device to its API representation
|
|
func (s *SkillsHWDevice) Unmarshal(hwdevice skills.HWDevice) {
|
|
s.ID = hwdevice.Id
|
|
s.Name = hwdevice.Name
|
|
s.Extra = hwdevice.Extra
|
|
s.Media = hwdevice.Media
|
|
}
|
|
|
|
// SkillsDevice represents a group of ffmpeg hardware devices
|
|
type SkillsDevice struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Devices []SkillsHWDevice `json:"devices"`
|
|
}
|
|
|
|
// Unmarshal converts a skills device to its API representation
|
|
func (s *SkillsDevice) Unmarshal(device skills.Device) {
|
|
s.ID = device.Id
|
|
s.Name = device.Name
|
|
s.Devices = make([]SkillsHWDevice, len(device.Devices))
|
|
|
|
for i, dev := range device.Devices {
|
|
s.Devices[i].Unmarshal(dev)
|
|
}
|
|
}
|
|
|
|
// SkillsFormat represents an ffmpeg format
|
|
type SkillsFormat struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// Unmarshal converts a skills format to its API representation
|
|
func (s *SkillsFormat) Unmarshal(format skills.Format) {
|
|
s.ID = format.Id
|
|
s.Name = format.Name
|
|
}
|
|
|
|
// SkillsProtocol represents an ffmpeg protocol
|
|
type SkillsProtocol struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// Unmarshal converts a skills protocol to its API representation
|
|
func (s *SkillsProtocol) Unmarshal(proto skills.Protocol) {
|
|
s.ID = proto.Id
|
|
s.Name = proto.Name
|
|
}
|
|
|
|
// SkillsLibrary represents an avlib ffmpeg is compiled and linked with
|
|
type SkillsLibrary struct {
|
|
Name string `json:"name"`
|
|
Compiled string `json:"compiled"`
|
|
Linked string `json:"linked"`
|
|
}
|
|
|
|
// Unmarshal converts a skills library to its API representation
|
|
func (s *SkillsLibrary) Unmarshal(lib skills.Library) {
|
|
s.Name = lib.Name
|
|
s.Compiled = lib.Compiled
|
|
s.Linked = lib.Linked
|
|
}
|
|
|
|
// Skills represents a set of ffmpeg capabilities
|
|
type Skills struct {
|
|
FFmpeg struct {
|
|
Version string `json:"version"`
|
|
Compiler string `json:"compiler"`
|
|
Configuration string `json:"configuration"`
|
|
Libraries []SkillsLibrary `json:"libraries"`
|
|
} `json:"ffmpeg"`
|
|
|
|
Filters []SkillsFilter `json:"filter"`
|
|
HWAccels []SkillsHWAccel `json:"hwaccels"`
|
|
|
|
Codecs struct {
|
|
Audio []SkillsCodec `json:"audio"`
|
|
Video []SkillsCodec `json:"video"`
|
|
Subtitle []SkillsCodec `json:"subtitle"`
|
|
} `json:"codecs"`
|
|
|
|
Devices struct {
|
|
Demuxers []SkillsDevice `json:"demuxers"`
|
|
Muxers []SkillsDevice `json:"muxers"`
|
|
} `json:"devices"`
|
|
|
|
Formats struct {
|
|
Demuxers []SkillsFormat `json:"demuxers"`
|
|
Muxers []SkillsFormat `json:"muxers"`
|
|
} `json:"formats"`
|
|
|
|
Protocols struct {
|
|
Input []SkillsProtocol `json:"input"`
|
|
Output []SkillsProtocol `json:"output"`
|
|
} `json:"protocols"`
|
|
}
|
|
|
|
// Unmarshal converts skills to their API representation
|
|
func (s *Skills) Unmarshal(skills skills.Skills) {
|
|
s.FFmpeg.Version = skills.FFmpeg.Version
|
|
s.FFmpeg.Compiler = skills.FFmpeg.Compiler
|
|
s.FFmpeg.Configuration = skills.FFmpeg.Configuration
|
|
s.FFmpeg.Libraries = make([]SkillsLibrary, len(skills.FFmpeg.Libraries))
|
|
for id, x := range skills.FFmpeg.Libraries {
|
|
s.FFmpeg.Libraries[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Filters = make([]SkillsFilter, len(skills.Filters))
|
|
for id, x := range skills.Filters {
|
|
s.Filters[id].Unmarshal(x)
|
|
}
|
|
|
|
s.HWAccels = make([]SkillsHWAccel, len(skills.HWAccels))
|
|
for id, x := range skills.HWAccels {
|
|
s.HWAccels[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Codecs.Audio = make([]SkillsCodec, len(skills.Codecs.Audio))
|
|
for id, x := range skills.Codecs.Audio {
|
|
s.Codecs.Audio[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Codecs.Video = make([]SkillsCodec, len(skills.Codecs.Video))
|
|
for id, x := range skills.Codecs.Video {
|
|
s.Codecs.Video[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Codecs.Subtitle = make([]SkillsCodec, len(skills.Codecs.Subtitle))
|
|
for id, x := range skills.Codecs.Subtitle {
|
|
s.Codecs.Subtitle[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Devices.Demuxers = make([]SkillsDevice, len(skills.Devices.Demuxers))
|
|
for id, x := range skills.Devices.Demuxers {
|
|
s.Devices.Demuxers[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Devices.Muxers = make([]SkillsDevice, len(skills.Devices.Muxers))
|
|
for id, x := range skills.Devices.Muxers {
|
|
s.Devices.Muxers[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Formats.Demuxers = make([]SkillsFormat, len(skills.Formats.Demuxers))
|
|
for id, x := range skills.Formats.Demuxers {
|
|
s.Formats.Demuxers[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Formats.Muxers = make([]SkillsFormat, len(skills.Formats.Muxers))
|
|
for id, x := range skills.Formats.Muxers {
|
|
s.Formats.Muxers[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Protocols.Input = make([]SkillsProtocol, len(skills.Protocols.Input))
|
|
for id, x := range skills.Protocols.Input {
|
|
s.Protocols.Input[id].Unmarshal(x)
|
|
}
|
|
|
|
s.Protocols.Output = make([]SkillsProtocol, len(skills.Protocols.Output))
|
|
for id, x := range skills.Protocols.Output {
|
|
s.Protocols.Output[id].Unmarshal(x)
|
|
}
|
|
}
|