mirror of
https://github.com/bluenviron/mediamtx
synced 2025-02-12 09:27:59 +00:00
hls client: do not create audio track when there's no audio track
This commit is contained in:
parent
99f3215cfe
commit
56338e0084
@ -103,7 +103,7 @@ func (s *hlsSource) runInner() bool {
|
||||
}
|
||||
}()
|
||||
|
||||
onTracks := func(videoTrack gortsplib.Track, audioTrack gortsplib.Track) error {
|
||||
onTracks := func(videoTrack *gortsplib.TrackH264, audioTrack *gortsplib.TrackAAC) error {
|
||||
var tracks gortsplib.Tracks
|
||||
|
||||
if videoTrack != nil {
|
||||
|
@ -46,7 +46,7 @@ type ClientLogger interface {
|
||||
|
||||
// Client is a HLS client.
|
||||
type Client struct {
|
||||
onTracks func(gortsplib.Track, gortsplib.Track) error
|
||||
onTracks func(*gortsplib.TrackH264, *gortsplib.TrackAAC) error
|
||||
onVideoData func(time.Duration, [][]byte)
|
||||
onAudioData func(time.Duration, [][]byte)
|
||||
logger ClientLogger
|
||||
@ -69,8 +69,8 @@ type Client struct {
|
||||
audioProc *clientAudioProcessor
|
||||
|
||||
tracksMutex sync.RWMutex
|
||||
videoTrack gortsplib.Track
|
||||
audioTrack gortsplib.Track
|
||||
videoTrack *gortsplib.TrackH264
|
||||
audioTrack *gortsplib.TrackAAC
|
||||
|
||||
// in
|
||||
allocateProcs chan clientAllocateProcsReq
|
||||
@ -83,7 +83,7 @@ type Client struct {
|
||||
func NewClient(
|
||||
primaryPlaylistURLStr string,
|
||||
fingerprint string,
|
||||
onTracks func(gortsplib.Track, gortsplib.Track) error,
|
||||
onTracks func(*gortsplib.TrackH264, *gortsplib.TrackAAC) error,
|
||||
onVideoData func(time.Duration, [][]byte),
|
||||
onAudioData func(time.Duration, [][]byte),
|
||||
logger ClientLogger,
|
||||
@ -167,12 +167,8 @@ func (c *Client) runInner() error {
|
||||
if c.videoPID != nil {
|
||||
c.videoProc = newClientVideoProcessor(
|
||||
innerCtx,
|
||||
c.onVideoTrack,
|
||||
func(pts time.Duration, nalus [][]byte) {
|
||||
c.tracksMutex.RLock()
|
||||
defer c.tracksMutex.RUnlock()
|
||||
c.onVideoData(pts, nalus)
|
||||
},
|
||||
c.onVideoProcessorTrack,
|
||||
c.onVideoProcessorData,
|
||||
c.logger)
|
||||
|
||||
go func() { errChan <- c.videoProc.run() }()
|
||||
@ -181,12 +177,8 @@ func (c *Client) runInner() error {
|
||||
if c.audioPID != nil {
|
||||
c.audioProc = newClientAudioProcessor(
|
||||
innerCtx,
|
||||
c.onAudioTrack,
|
||||
func(pts time.Duration, aus [][]byte) {
|
||||
c.tracksMutex.RLock()
|
||||
defer c.tracksMutex.RUnlock()
|
||||
c.onAudioData(pts, aus)
|
||||
})
|
||||
c.onAudioProcessorTrack,
|
||||
c.onAudioProcessorData)
|
||||
|
||||
go func() { errChan <- c.audioProc.run() }()
|
||||
}
|
||||
@ -525,7 +517,7 @@ func (c *Client) processSegment(innerCtx context.Context, byts []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) onVideoTrack(track gortsplib.Track) error {
|
||||
func (c *Client) onVideoProcessorTrack(track *gortsplib.TrackH264) error {
|
||||
c.tracksMutex.Lock()
|
||||
defer c.tracksMutex.Unlock()
|
||||
|
||||
@ -538,7 +530,13 @@ func (c *Client) onVideoTrack(track gortsplib.Track) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) onAudioTrack(track gortsplib.Track) error {
|
||||
func (c *Client) onVideoProcessorData(pts time.Duration, nalus [][]byte) {
|
||||
c.tracksMutex.RLock()
|
||||
defer c.tracksMutex.RUnlock()
|
||||
c.onVideoData(pts, nalus)
|
||||
}
|
||||
|
||||
func (c *Client) onAudioProcessorTrack(track *gortsplib.TrackAAC) error {
|
||||
c.tracksMutex.Lock()
|
||||
defer c.tracksMutex.Unlock()
|
||||
|
||||
@ -550,3 +548,9 @@ func (c *Client) onAudioTrack(track gortsplib.Track) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) onAudioProcessorData(pts time.Duration, aus [][]byte) {
|
||||
c.tracksMutex.RLock()
|
||||
defer c.tracksMutex.RUnlock()
|
||||
c.onAudioData(pts, aus)
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ type clientAudioProcessorData struct {
|
||||
|
||||
type clientAudioProcessor struct {
|
||||
ctx context.Context
|
||||
onTrack func(gortsplib.Track) error
|
||||
onTrack func(*gortsplib.TrackAAC) error
|
||||
onData func(time.Duration, [][]byte)
|
||||
|
||||
trackInitialized bool
|
||||
@ -26,7 +26,7 @@ type clientAudioProcessor struct {
|
||||
|
||||
func newClientAudioProcessor(
|
||||
ctx context.Context,
|
||||
onTrack func(gortsplib.Track) error,
|
||||
onTrack func(*gortsplib.TrackAAC) error,
|
||||
onData func(time.Duration, [][]byte),
|
||||
) *clientAudioProcessor {
|
||||
p := &clientAudioProcessor{
|
||||
|
@ -214,7 +214,7 @@ func TestClient(t *testing.T) {
|
||||
c, err := NewClient(
|
||||
prefix+"://localhost:5780/stream.m3u8",
|
||||
"33949E05FFFB5FF3E8AA16F8213A6251B4D9363804BA53233C4DA9A46D6F2739",
|
||||
func(gortsplib.Track, gortsplib.Track) error {
|
||||
func(*gortsplib.TrackH264, *gortsplib.TrackAAC) error {
|
||||
return nil
|
||||
},
|
||||
func(pts time.Duration, nalus [][]byte) {
|
||||
|
@ -19,7 +19,7 @@ type clientVideoProcessorData struct {
|
||||
|
||||
type clientVideoProcessor struct {
|
||||
ctx context.Context
|
||||
onTrack func(gortsplib.Track) error
|
||||
onTrack func(*gortsplib.TrackH264) error
|
||||
onData func(time.Duration, [][]byte)
|
||||
logger ClientLogger
|
||||
|
||||
@ -32,7 +32,7 @@ type clientVideoProcessor struct {
|
||||
|
||||
func newClientVideoProcessor(
|
||||
ctx context.Context,
|
||||
onTrack func(gortsplib.Track) error,
|
||||
onTrack func(*gortsplib.TrackH264) error,
|
||||
onData func(time.Duration, [][]byte),
|
||||
logger ClientLogger,
|
||||
) *clientVideoProcessor {
|
||||
|
Loading…
Reference in New Issue
Block a user