使用 FFmpeg C++ 中将 RTSP 转为 RTMP

打开 RTSP 流:

avformat_open_input(&rtspformatcontext, rtspuri.c_str(), nullptr, &opts);

读取 RTSP 流信息:

avformat_find_stream_info(rtspformatcontext,nullptr);

创建 RTMP 输出流:

avformat_alloc_output_context2(&rtmpcontext, nullptr, "flv", rtmpurl.c_str());

在 RTMP 上下文中创建视频流:

const AVCodec* codec = avcodec_find_decoder(rtspformatcontext->streams[*video_stream]->codecpar->codec_id);
AVStream* videooutstream = avformat_new_stream(rtmpcontext, codec);
avcodec_parameters_copy(videooutstream->codecpar, rtspformatcontext->streams[*video_stream]->codecpar);

在 RTMP 上下文中创建可选音频流:

const AVCodec* avcodecaudio = avcodec_find_decoder(rtspformatcontext->streams[*audio_stream]->codecpar->codec_id);
audiooutstream = avformat_new_stream(rtmpcontext, avcodecaudio);
avcodec_parameters_copy(audiooutstream->codecpar, rtspformatcontext->streams[*audio_stream]->codecpar);

打开 RTMP 流:

avio_open(&rtmpcontext->pb, rtmpurl.c_str(), AVIO_FLAG_WRITE);
avformat_write_header(rtmpcontext, nullptr);

读取 RTSP 帧。

av_read_frame(rtspformatcontext, packet);

写入 RTMP 帧。

av_interleaved_write_frame(rtmpcontext, packet);

完整代码:https://github.com/MonocleSecurity/RTSP2RTMP

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/50386.html

(0)

相关推荐

发表回复

登录后才能评论