H264 编码视频流 FFMPEG C++

h264 encode video stream ffmpeg c++

本文关键字:FFMPEG C++ 视频 编码 H264      更新时间:2023-10-16

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

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

但是我一直得到AVCodec类型"MPEG",我一直在尝试更改文件扩展名并尝试不同的方法avformat_alloc_output_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_alloc_output_context2 oc->oformat->video_codec 生成为 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_alloc_output_context2

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

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

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

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

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

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