打开 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