天天看点

ffmpeg-设置推流,拉流使用的协议类型(TCP/UDP)

//设置参数
 AVDictionary *format_opts = NULL;
 av_dict_set(&format_opts, "stimeout", std::to_string( 2* 1000000).c_str(), 0); //设置链接超时时间(us)
 av_dict_set(&format_opts, "rtsp_transport",  "tcp", 0); //设置推流的方式,默认udp。
 //初始化输入上下文
 AVFormatContext * m_InputContext = avformat_alloc_context();
 //打开输入流。
 avformat_open_input(&m_InputContext, "rtsp://127.0.0.1:554/", NULL, &format_opts);
 // ......123456789推流(设置TCP/UDP)
//初始化输出流上下文。
 AVFormatContext * output_format_context_ = NULL;
 avformat_alloc_output_context2(&output_format_context_, NULL, "rtsp", "rtsp://127.0.0.1:554/");
 /*
     添加流信息
     //TODO
 */
 //设置参数,设置为TCP推流, 默认UDP
 AVDictionary *format_opts = NULL;
 av_dict_set(&format_opts, "stimeout", std::to_string(2 * 1000000).c_str(), 0);
 av_dict_set(&format_opts, "rtsp_transport", "tcp", 0);
 //写入输出头(建立rtsp连接)
 avformat_write_header(output_format_context_, &format_opts);while(1)
 {
     AVPakcet media_pkt;
     /*
         初始化PKT,
         读取数据,
         填充数据,
     */
     //发送数据, 多个流时需要使用 av_interleaved_write_frame, 另附ret部分错误码,见其他文章。
     int ret = av_interleaved_write_frame(output_format_context_, &media_pkt);
     //释放数据
     av_packet_unref(&media_pkt);
     av_free_packet(&media_pkt);
 }12345678910111213141516171819202122232425262728      

继续阅读