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

原文地址:

https://blog.csdn.net/shizheng163/article/details/80475927

 

如有错误,请指正,谢谢。

拉流(设置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

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个功能强大的跨平台多媒体处理工具,常用于视频编码、解码、流媒体推拉操作,包括从本地文件或实时摄像头捕获内容推送到网络流,以及从网络流拉取并播放。在局域网(LAN)中使用FFmpeg推流拉流,主要涉及以下几个步骤: 1. **推流**: - **设置编码器**: 使用如-h264enc或-vp9enc选项配置视频编码器,-acodec aac或libopus配置音频编码器。 - **创建RTSP或HTTP流**: FFmpeg支持多种协议推流,如RTMP、RTSP、HTTP Live Streaming (HLS)等。比如使用`-f rtsp`推送到RTSP服务器,`-f flv`推送到RTMP服务器。 - **指定目标地址**: 指定网络上可以访问的服务器地址和端口,例如`-rtsp_transport tcp`指定TCP协议。 2. **拉流**: - **解析URL**: 根据推流使用协议,如RTSP URL、RTMP URL或HLS播放列表URL,使用FFmpeg解析并连接到流源。 - **解码器配置**: 设置相应的解码器,如`-decoders`选项来启用特定解码器。 - **播放流**: 使用`ffplay`命令行工具播放拉取的流,或者在其他应用程序中集成FFmpeg解码器。 3. **局域网限制与注意事项**: - 在局域网环境下,确保防火墙设置允许进出流量,特别是RTSP或UDP端口。 - 推流拉流的性能取决于网络带宽和设备性能,可能需要调整码率以适应网络条件。 **相关问题--:** 1. 如何在FFmpeg设置合适的码率以优化局域网推流? 2. FFmpeg如何处理RTSP和RTMP协议的兼容性问题? 3. 在局域网环境下,FFmpeg推流是否需要特定的服务器软件支持?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值