C++ h264编码视频流ffmpeg c++;

C++ h264编码视频流ffmpeg c++;,c++,ffmpeg,video-streaming,C++,Ffmpeg,Video Streaming,我正在尝试开发一个实时流媒体应用程序,从网络摄像机捕获视频,将其编码到H264视频流,并使用rtsp将其发送到设备, 我查阅了一些示例,发现: 我一直在用它作为我程序的参考 然而,我一直在使用AVCodec类型“MPEG”,我一直在尝试更改文件扩展名,并尝试使用avformat\U alloc\U output\U context2的不同方法 以下是相关代码: const char *filename = "rtsp://127.0.0.1:7003/live.sdp"; AVOutputFo

我正在尝试开发一个实时流媒体应用程序,从网络摄像机捕获视频,将其编码到H264视频流,并使用rtsp将其发送到设备, 我查阅了一些示例,发现:

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

然而,我一直在使用AVCodec类型“MPEG”,我一直在尝试更改文件扩展名,并尝试使用avformat\U alloc\U output\U context2的不同方法

以下是相关代码:

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\u alloc\u output\u context2 oc->oformat->video后,编解码器生成为MPEG编解码器。 我已尝试将文件扩展名更改为:

const char *filename = "rtsp://127.0.0.1:7003/live.264";
const char *filename = "rtsp://127.0.0.1:7003/live.h264";
和其他一些扩展

如何生成H264流?

根据,需要将输出格式传递到
avformat\u alloc\u output\u context2

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

[第二个参数是]用于分配上下文的格式,如果改为使用空格式\u name和filename

此参数是指向类型的指针

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

无论如何,我认为您需要将编码过程与流协议分离


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

AVOutputFormat在调用avformat\u alloc\u output\u context2时在(AVFormatContext)oc内部生成,这就是为什么当将NULL作为第二个参数传递时,方法应该“猜测”的原因什么是合适的格式。@哈恩尝试手动设置,只是为了确定。此外,您应该尝试另一个编解码器,看看问题是否与RTSP隔离(直接尝试H264?)感谢OMGtrchy,将H264设置为RTSP有效,但是我仍然希望使用RTSP协议流式传输视频,这是否有效?@Hahn刚刚更新了答案。如果你仍然有问题,我会在我有更多时间的时候写一些更详细的东西(目前在我的手机上)。