我正在尝试开发一个从网络摄像头捕获视频的实时流媒体应用,将其编码为 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流?
答案 0 :(得分:1)
根据the documentation,您需要将输出格式传递给avformat_alloc_output_context2
。
引用(方括号中的内容):
[第二个参数是]用于分配上下文的格式,如果使用NULL format_name和filename
此参数是指向AVOutputFormat类型的指针。
或者,您可以继续传递NULL
并使用H264作为格式名称来推断输出。
无论哪种方式,我认为您需要将编码过程与流媒体协议分开。
这种关注点分离很有用,就像您发现要使用不同的协议来获取流一样,编码代码不需要知道它。