美文网首页
avformat_open_input 阻塞 and 设置超时时

avformat_open_input 阻塞 and 设置超时时

作者: Kingiiyy_iOS | 来源:发表于2019-10-24 10:21 被阅读0次

    在编写能够适配 h264 和 h265 编码的MP4播放器时遇到的问题.(PS如果iOS系统播放器能够满足这一点我也不至于会累成狗).于是有了以下的尝试.

    1. 完美解析播放 本地mp4 (h264编码)
    2. 完美解析播放 本地mp4 (h265编码)
    3. 解析网络mp4 (海鸟)
      视频地址 http://vjs.zencdn.net/v/oceans.mp4 卡顿超级严重
    4. 解析网络mp4 (驯龙高手)
      视频地址 http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4 播放顺畅
    5. 解析网络mp4 这边是找了一个h265编码的视频.不好找呀.我这里也是限时才有的 播放顺畅

    ffmpeg 用avformat_open_input() 解析网络流时.默认是阻塞线程, 解析错误或其他原因的长时间不返回.
    为 avformat_open_input() 函数设置stimeout 的参数 (单位微妙)
    设置interrupt_callback和timeout . 能解决这些问题

    设置超时时间timeout

    //设置一些参数
        //    AVDictionary * options = NULL;
        /*
         //设置缓存大小,1080p可将值调大
         //以udp方式打开,如果以tcp方式打开将udp替换为tcp
         //设置超时3秒 设置超时断开连接时间,单位微秒
         //设置最大时延
         */
        // av_dict_set(&options, "buffer_size", "1024000", 0);
        // av_dict_set(&options, "rtsp_transport", "tcp", 0);
        // av_dict_set(&options, "stimeout", "3000000", 0);
        // av_dict_set(&options, "max_delay", "500000", 0);
        
        //    pFormatCtx->probesize = 100 *1024;
        //    pFormatCtx->max_analyze_duration = 5 * AV_TIME_BASE;
    
        AVDictionary * opts = NULL;
        av_dict_set(&opts, "rtsp_transport", "tcp", 0);
        av_dict_set(&opts, "stimeout", "2000000", 0);
    

    avformat_open_input 阻塞处理 interrupt_callback

    static int decode_interrupt_cb(void *ctx)
    {
        return 1;  // return 1 时会立刻结束阻塞
    }
    //建议这么写
    static int decode_interrupt_cb(void *ctx)
    {
        exit_info * is = ctx;
        if (is->nExit == 1) {
            OOLog(@"终止rtsp >>>>>>>>>>>>>>>>>>> is->nExit = 1");
        }
        return is->nExit;
    }
    想结束时 is->nExit = 1; 就好了
    
    formatCtx->interrupt_callback.callback = decode_interrupt_cb;
    formatCtx->interrupt_callback.opaque = is;
    

    当然也有说avformat_open_input 能设置成非阻塞的 (设置后貌似没效果,建议不用)

    formatCtx->flags |= AVFMT_FLAG_NONBLOCK;
    

    相关文章

      网友评论

          本文标题:avformat_open_input 阻塞 and 设置超时时

          本文链接:https://www.haomeiwen.com/subject/sxkrvctx.html