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

时间:2016-06-24 10:31:20

标签: c# google-chrome video ffmpeg streaming

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

enter image description here

我正在使用的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流生成的视频完美无缺。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

example会告诉您它是如何完成的。

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