[FFmpeg-devel] VP9 RTP encoder and WebRTC
Thomas Volkert
silvo at gmx.net
Sat Jun 1 22:25:17 EEST 2019
Hi,
On 01.06.19 19:35, Alex Protasenko wrote:
> Hello,
>
>
> I'm trying to play some realtime video sources (web/IP cam) using
> WebRTC in a browser. I'm sending RTP stream via Janus gateway using
> VP9 codec, hardware transcoded using ffmpeg.
>
> Everything works fine except random frame corruption happening around
> moving objects, portions of frame "flowing off the screen" and such
> until next keyframe fixes it. This happens consistently especially at
> higher framerates.
>
> It turns out the issue could be narrowed down to the VP9 RTP
> packetizer. The problem is it's not marking P frames vs I frames in
> the VP9 payload descriptor octet (the P bit). Gstreamer does that and
> doesn't experience any such corruption issues.
>
> I added this simple change and now WebRTC plays any stream 100% solid
> and corruption free for me.
>
>
> Could somebody implement this simple fix in the upstream. Basically
> in libavformat/rtpenc_vp9.c add something to the effect of the
> following two lines (to set the P bit for all but I frames):
>
> /* mark the first fragment */
> *rtp_ctx->buf_ptr++ = 0x08;
>
> + if (!keyframe) {
> + rtp_ctx->buf[0] |= 0x40;
>
>
> Where the "keyframe" is an additional boolean parameter to the
> ff_rtp_send_vp9 function which could be called as:
>
> ff_rtp_send_vp9(s1, pkt->data, size, pkt->flags & AV_PKT_FLAG_KEY);
I can have a look in the next days.
Best regards,
Thomas.
More information about the ffmpeg-devel
mailing list