流式video(使用FFmpeg AutoGen的C#)发送多个数据请求

我写了一个video生成器,以h264格式(mp4)对video进行修改。 当我从我的azure服务流式传输video时,我看到以下网络流量:

在此处输入图像描述

我正在使用的AVCodecContext布局如下:

AVCodec* videoCodec = ffmpeg.avcodec_find_encoder(AVCodecID.AV_CODEC_ID_H264) AVCodecContext* videoCodecContext = ffmpeg.avcodec_alloc_context3(videoCodec); videoCodecContext->bit_rate = 400000; videoCodecContext->width = 1280; videoCodecContext->height = 720; videoCodecContext->gop_size = 12; videoCodecContext->max_b_frames = 1; videoCodecContext->pix_fmt = videoCodec->pix_fmts[0]; videoCodecContext->codec_id = videoCodec->id; videoCodecContext->codec_type = videoCodec->type; videoCodecContext->time_base = new AVRational { num = 1, den = 30 }; ffmpeg.av_opt_set(videoCodecContext->priv_data, "preset", "ultrafast"); 

我也尝试通过AVDictionary为avformat_write_header()设置“movflags”选项,但是av_write_trailer()返回-2,导致文件没有完成写入。

我无法弄清楚如何解决这个问题。 使用Windows Movie Maker流生成的video完美无缺。

我知道这与mdat和mov的位置有关。

此外,这似乎只发生在谷歌浏览器中。

好吧,想通了。 我一直在写video帧,之后是音频帧。 相反,您必须并排编写它们才能使faststart实际工作并允许video流式传输。

因此,写入特定数量的音频,然后通过检查当前写入索引的时基来确定是否应该写入video帧。

这个例子将告诉你它是如何完成的。

此外,要使video和音频流具有准确的PTS / DTS值,请查看此问题。