前期准备
ffmpeg、easydarwin、C++基础,都在专栏里的其他博客可以找到。
代码分析
没啥好记录的,和拉流差不多,流程就是:
- 打开输入文件,获取输入格式上下文,找到视频流的信息
- 创建输出格式上下文,指定RTSP的URL。
- 在输出上下文中添加流,使用输入流的编解码参数。
- 写入输出文件的头信息。
- 循环读取输入文件的数据包,调整时间戳(如果需要),然后写入输出。
- 清理资源
整体代码
extern "C" {
#include <libavformat/avformat.h>
#include <libavutil/opt.h>
}
#include <iostream>
int main()
{
const char* input_filename = "./input1.mp4";//根据自身视频位置,修改,可以为绝对路径
const char* output_url = "rtsp://127.0.0.1:554/your_stream_key";
AVFormatContext* input_ctx = nullptr;
AVFormatContext* output_ctx = nullptr;
AVDictionary* options = nullptr;
// 初始化网络库
avformat_network_init();
// 打开输入文件
if (avformat_open_input(&input_ctx, input_filename, nullptr, nullptr) < 0) {
std::cerr << "Could not open input file\n";
return -1;
}
if (avformat_find_stream_info(input_ctx