mirror of
https://github.com/pion/mediadevices.git
synced 2025-10-31 03:46:23 +08:00
Remove webrtc dependency in codec and its sub packages
This commit is contained in:
@@ -161,8 +161,8 @@ type mockParams struct {
|
|||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (params *mockParams) Name() string {
|
func (params *mockParams) Name() codec.Name {
|
||||||
return params.name
|
return codec.Name(params.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (params *mockParams) BuildVideoEncoder(r video.Reader, p prop.Media) (codec.ReadCloser, error) {
|
func (params *mockParams) BuildVideoEncoder(r video.Reader, p prop.Media) (codec.ReadCloser, error) {
|
||||||
|
|||||||
@@ -8,6 +8,17 @@ import (
|
|||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Name represents codec official name. It's possible to have more than 1 implementations
|
||||||
|
// for the same codec name, e.g. openh264 vs x264.
|
||||||
|
type Name string
|
||||||
|
|
||||||
|
const (
|
||||||
|
NameOpus Name = "opus"
|
||||||
|
NameH264 Name = "H264"
|
||||||
|
NameVP8 Name = "VP8"
|
||||||
|
NameVP9 Name = "VP9"
|
||||||
|
)
|
||||||
|
|
||||||
// AudioEncoderBuilder is the interface that wraps basic operations that are
|
// AudioEncoderBuilder is the interface that wraps basic operations that are
|
||||||
// necessary to build the audio encoder.
|
// necessary to build the audio encoder.
|
||||||
//
|
//
|
||||||
@@ -15,7 +26,7 @@ import (
|
|||||||
// but still giving generality for the users.
|
// but still giving generality for the users.
|
||||||
type AudioEncoderBuilder interface {
|
type AudioEncoderBuilder interface {
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
Name() string
|
Name() Name
|
||||||
// BuildAudioEncoder builds audio encoder by given media params and audio input
|
// BuildAudioEncoder builds audio encoder by given media params and audio input
|
||||||
BuildAudioEncoder(r audio.Reader, p prop.Media) (ReadCloser, error)
|
BuildAudioEncoder(r audio.Reader, p prop.Media) (ReadCloser, error)
|
||||||
}
|
}
|
||||||
@@ -27,7 +38,7 @@ type AudioEncoderBuilder interface {
|
|||||||
// but still giving generality for the users.
|
// but still giving generality for the users.
|
||||||
type VideoEncoderBuilder interface {
|
type VideoEncoderBuilder interface {
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
Name() string
|
Name() Name
|
||||||
// BuildVideoEncoder builds video encoder by given media params and video input
|
// BuildVideoEncoder builds video encoder by given media params and video input
|
||||||
BuildVideoEncoder(r video.Reader, p prop.Media) (ReadCloser, error)
|
BuildVideoEncoder(r video.Reader, p prop.Media) (ReadCloser, error)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"github.com/pion/mediadevices/pkg/codec"
|
"github.com/pion/mediadevices/pkg/codec"
|
||||||
"github.com/pion/mediadevices/pkg/io/video"
|
"github.com/pion/mediadevices/pkg/io/video"
|
||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
"github.com/pion/webrtc/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Params stores libopenh264 specific encoding parameters.
|
// Params stores libopenh264 specific encoding parameters.
|
||||||
@@ -22,8 +21,8 @@ func NewParams() (Params, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *Params) Name() string {
|
func (p *Params) Name() codec.Name {
|
||||||
return webrtc.H264
|
return codec.NameH264
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds openh264 encoder with given params
|
// BuildVideoEncoder builds openh264 encoder with given params
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"github.com/pion/mediadevices/pkg/io/audio"
|
"github.com/pion/mediadevices/pkg/io/audio"
|
||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
"github.com/pion/mediadevices/pkg/wave/mixer"
|
"github.com/pion/mediadevices/pkg/wave/mixer"
|
||||||
"github.com/pion/webrtc/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Params stores opus specific encoding parameters.
|
// Params stores opus specific encoding parameters.
|
||||||
@@ -21,8 +20,8 @@ func NewParams() (Params, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *Params) Name() string {
|
func (p *Params) Name() codec.Name {
|
||||||
return webrtc.Opus
|
return codec.NameOpus
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildAudioEncoder builds opus encoder with given params
|
// BuildAudioEncoder builds opus encoder with given params
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"github.com/pion/mediadevices/pkg/codec"
|
"github.com/pion/mediadevices/pkg/codec"
|
||||||
"github.com/pion/mediadevices/pkg/io/video"
|
"github.com/pion/mediadevices/pkg/io/video"
|
||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
"github.com/pion/webrtc/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ParamsVP8 stores VP8 encoding parameters.
|
// ParamsVP8 stores VP8 encoding parameters.
|
||||||
@@ -45,8 +44,8 @@ func NewVP8Params() (ParamsVP8, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *ParamsVP8) Name() string {
|
func (p *ParamsVP8) Name() codec.Name {
|
||||||
return webrtc.VP8
|
return codec.NameVP8
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds VP8 encoder with given params
|
// BuildVideoEncoder builds VP8 encoder with given params
|
||||||
@@ -114,8 +113,8 @@ func NewVP9Params() (ParamsVP9, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *ParamsVP9) Name() string {
|
func (p *ParamsVP9) Name() codec.Name {
|
||||||
return webrtc.VP9
|
return codec.NameVP9
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds VP9 encoder with given params
|
// BuildVideoEncoder builds VP9 encoder with given params
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ import (
|
|||||||
mio "github.com/pion/mediadevices/pkg/io"
|
mio "github.com/pion/mediadevices/pkg/io"
|
||||||
"github.com/pion/mediadevices/pkg/io/video"
|
"github.com/pion/mediadevices/pkg/io/video"
|
||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
"github.com/pion/webrtc/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type encoder struct {
|
type encoder struct {
|
||||||
@@ -96,8 +95,8 @@ func NewVP8Params() (VP8Params, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *VP8Params) Name() string {
|
func (p *VP8Params) Name() codec.Name {
|
||||||
return webrtc.VP8
|
return codec.NameVP8
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds VP8 encoder with given params
|
// BuildVideoEncoder builds VP8 encoder with given params
|
||||||
@@ -123,8 +122,8 @@ func NewVP9Params() (VP9Params, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *VP9Params) Name() string {
|
func (p *VP9Params) Name() codec.Name {
|
||||||
return webrtc.VP9
|
return codec.NameVP9
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds VP9 encoder with given params
|
// BuildVideoEncoder builds VP9 encoder with given params
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"github.com/pion/mediadevices/pkg/codec"
|
"github.com/pion/mediadevices/pkg/codec"
|
||||||
"github.com/pion/mediadevices/pkg/io/video"
|
"github.com/pion/mediadevices/pkg/io/video"
|
||||||
"github.com/pion/mediadevices/pkg/prop"
|
"github.com/pion/mediadevices/pkg/prop"
|
||||||
"github.com/pion/webrtc/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Params stores libx264 specific encoding parameters.
|
// Params stores libx264 specific encoding parameters.
|
||||||
@@ -41,8 +40,8 @@ func NewParams() (Params, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Name represents the codec name
|
// Name represents the codec name
|
||||||
func (p *Params) Name() string {
|
func (p *Params) Name() codec.Name {
|
||||||
return webrtc.H264
|
return codec.NameH264
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildVideoEncoder builds x264 encoder with given params
|
// BuildVideoEncoder builds x264 encoder with given params
|
||||||
|
|||||||
27
track.go
27
track.go
@@ -12,6 +12,15 @@ import (
|
|||||||
"github.com/pion/webrtc/v2/pkg/media"
|
"github.com/pion/webrtc/v2/pkg/media"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
webrtcCodecMapper = map[codec.Name]string{
|
||||||
|
codec.NameH264: webrtc.H264,
|
||||||
|
codec.NameVP8: webrtc.VP8,
|
||||||
|
codec.NameVP9: webrtc.VP9,
|
||||||
|
codec.NameOpus: webrtc.Opus,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Tracker is an interface that represent MediaStreamTrack
|
// Tracker is an interface that represent MediaStreamTrack
|
||||||
// Reference: https://w3c.github.io/mediacapture-main/#mediastreamtrack
|
// Reference: https://w3c.github.io/mediacapture-main/#mediastreamtrack
|
||||||
type Tracker interface {
|
type Tracker interface {
|
||||||
@@ -207,7 +216,14 @@ func newVideoEncoderBuilders(vr driver.VideoRecorder, constraints MediaTrackCons
|
|||||||
|
|
||||||
encoderBuilders := make([]encoderBuilder, len(constraints.VideoEncoderBuilders))
|
encoderBuilders := make([]encoderBuilder, len(constraints.VideoEncoderBuilders))
|
||||||
for i, b := range constraints.VideoEncoderBuilders {
|
for i, b := range constraints.VideoEncoderBuilders {
|
||||||
encoderBuilders[i].name = b.Name()
|
// If the codec name is not in the supported mapping, fallback to as is
|
||||||
|
codecName := b.Name()
|
||||||
|
mappedName, ok := webrtcCodecMapper[codecName]
|
||||||
|
if ok {
|
||||||
|
encoderBuilders[i].name = mappedName
|
||||||
|
} else {
|
||||||
|
encoderBuilders[i].name = string(codecName)
|
||||||
|
}
|
||||||
encoderBuilders[i].build = func() (codec.ReadCloser, error) {
|
encoderBuilders[i].build = func() (codec.ReadCloser, error) {
|
||||||
return b.BuildVideoEncoder(r, constraints.selectedMedia)
|
return b.BuildVideoEncoder(r, constraints.selectedMedia)
|
||||||
}
|
}
|
||||||
@@ -229,7 +245,14 @@ func newAudioEncoderBuilders(ar driver.AudioRecorder, constraints MediaTrackCons
|
|||||||
|
|
||||||
encoderBuilders := make([]encoderBuilder, len(constraints.AudioEncoderBuilders))
|
encoderBuilders := make([]encoderBuilder, len(constraints.AudioEncoderBuilders))
|
||||||
for i, b := range constraints.AudioEncoderBuilders {
|
for i, b := range constraints.AudioEncoderBuilders {
|
||||||
encoderBuilders[i].name = b.Name()
|
// If the codec name is not in the supported mapping, fallback to as is
|
||||||
|
codecName := b.Name()
|
||||||
|
mappedName, ok := webrtcCodecMapper[codecName]
|
||||||
|
if ok {
|
||||||
|
encoderBuilders[i].name = mappedName
|
||||||
|
} else {
|
||||||
|
encoderBuilders[i].name = string(codecName)
|
||||||
|
}
|
||||||
encoderBuilders[i].build = func() (codec.ReadCloser, error) {
|
encoderBuilders[i].build = func() (codec.ReadCloser, error) {
|
||||||
return b.BuildAudioEncoder(r, constraints.selectedMedia)
|
return b.BuildAudioEncoder(r, constraints.selectedMedia)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user