zoukankan      html  css  js  c++  java
  • ffmpeg fails with error "max delay reached. need to consume packet"

    rtsp服务默认使用udp协议,容易丢包,报这个错误。改为tcp,则解决。

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

    拉流(设置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);
    // ......

    推流(设置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);
    }
  • 相关阅读:
    ueditor后台配置项返回格式出错,上传功能将不能正常使用
    js控制多层单选,多选按钮,做隐藏操作
    js控制全屏及退出全屏
    springboot2.0jar包启动异常
    第九篇: 高可用的服务注册中心
    第八篇: 服务链路追踪(Spring Cloud Sleuth)
    第七篇: 消息总线(Spring Cloud Bus)
    第六篇: 分布式配置中心(Spring Cloud Config)
    第五篇: 路由网关(zuul)
    NodeJS
  • 原文地址:https://www.cnblogs.com/jiu0821/p/11406069.html
Copyright © 2011-2022 走看看