On Sat, Oct 31, 2020, at 5:17 AM, Carl Eugen Hoyos wrote:
> > I am trying to write the contents of an RTP-OPUS stream to an OGG-OPUS 
> > file. The purpose is to send a WebRTC session to Google's Speech-to-text 
> > API, which accepts OGG-OPUS as input.
> >
> > The opus muxer requires that an opus header be present in extradata. It 
> > seems that the demuxer from my RTP stream doesn't include this.
> >
> > If I construct the opus header myself and insert it into extradata, 
> > everything works great. This seems like a hack though. Is this something 
> > that the RTP demuxer should be doing?
> 
> At least channel count and sample rate are supposed to be read
> from the SDP file.

Yes, indeed the sample rate and channel count is read by the sdp demuxer, 
specifically in rtsp.c/sdp_parse_rtpmap(). This function assigns these values 
to codecpar->sample_rate and codecpar->channels. The problem is that the opus 
muxer expects codecpar->extradata to also be set with a valid opus header. See 
oggenc.c/ogg_init, lines 500-504.

My question is, where is the appropriate place for extradata to be assigned?

1) Should it be done by the user? This is what I'm doing I'm done now. It feels 
like a hack and isn't possible unless you're using the C API.

2) Should it be done in the demuxer somewhere? ff_rtp_parse_open in rtpdec.c 
does some codec specific changes to codecpar. Maybe this is an appropriate 
place to build an opus header for extradata.

3) Should it be done in the muxer? Instead of throwing an error, maybe 
ogg_init() should create a header based on the sample_rate and channel count in 
codecpar. It can use some sensible defaults for the rest.

4) Carl, you had a patch about a year ago to libavcodev/opus.c that looks like 
it addressed a similar issue.
https://ffmpeg.org/pipermail/ffmpeg-devel/2019-September/250177.html
It looks like the patch never landed because of a regression with webm 
playback. I noticed that the patch doesn't seem to assign the sample rate in 
the opus header (at offset 12), only the channel count (at offset 9). Maybe 
thats why?

Anyway, thanks for the reply!
_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to