h264编码视频流ffmpeg c ++

时间:2014-12-26 10:50:09

标签: c++ ffmpeg video-streaming

我正在尝试开发一个从网络摄像头捕获视频的实时流媒体应用,将其编码为 H264 视频流,并使用rtsp将其发送到设备, 我查了一些例子,发现了这个: FFMPEG to send RTSP encoded stream C++

我一直在用它作为我程序的参考。

但是,我一直在使用AVCodec类型&#34; MPEG&#34;,我一直在尝试更改 filename 扩展程序并尝试使用 avformat_alloc_output_context2 <的不同方法/ em>的

这是相关代码:

const char *filename = "rtsp://127.0.0.1:7003/live.sdp";
AVOutputFormat *fmt;
AVFormatContext *oc;
AVStream *video_st;
AVCodec *video_codec;
video_st = NULL;

av_register_all();
avformat_network_init();
// format context:
avformat_alloc_output_context2(&oc,NULL,"rtsp",filename);

在调用 avformat_alloc_output_context2 oc-&gt; oformat-&gt;之后,视频编码器生成为MPEG编解码器。 我尝试将文件扩展名更改为:

const char *filename = "rtsp://127.0.0.1:7003/live.264";
const char *filename = "rtsp://127.0.0.1:7003/live.h264";

以及其他一些扩展。

如何生成H264流?

1 个答案:

答案 0 :(得分:1)

根据the documentation,您需要将输出格式传递给avformat_alloc_output_context2

引用(方括号中的内容):

  

[第二个参数是]用于分配上下文的格式,如果使用NULL format_name和filename

此参数是指向AVOutputFormat类型的指针。

或者,您可以继续传递NULL并使用H264作为格式名称来推断输出。

无论哪种方式,我认为您需要将编码过程与流媒体协议分开。

这种关注点分离很有用,就像您发现要使用不同的协议来获取流一样,编码代码不需要知道它。