美文网首页FFmpeg程序员iOS之FFmpeg
AVFMT_FLAG_NOBUFFER 对解码的影响

AVFMT_FLAG_NOBUFFER 对解码的影响

作者: 睡后3k | 来源:发表于2016-12-10 08:20 被阅读557次

之前看到一文章 ijkplayer秒开
在使用它的配置之后,使用软解码怎么都是报 **Resource temporarily unavailable**
使用二分注释大法复现问题之后,发面是下面这句话导致的


pFomartCtx->flags |= AVFMT_FLAG_NOBUFFER;

所以AVFMT_FLAG_NOBUFFER为什么对软解产生影响

avformat_find_stream_info方法中,会判断AVFMT_FLAG_NOBUFFER,而是否添加到buffer中

if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
            ret = add_to_pktbuf(&ic->internal->packet_buffer, pkt,
                                &ic->internal->packet_buffer_end, 0);
            if (ret < 0)
                goto find_stream_info_err;

}

然后找到 avcodec_receive_frame 这么一句

    if (!avctx->internal->buffer_frame->buf[0]) {
        if (!avctx->internal->buffer_pkt->size && !avctx->internal->draining)

            return AVERROR(EAGAIN);

avctx->internal->buffer_pkt->size很好理解
avctx->internal->draining是什么?
原来只是avcodec_send_frame方法中的一个标记

  • pFomartCtx->flags 还能配置什么flag?
#define AVFMT_FLAG_GENPTS       0x0001 ///< Generate missing pts even if it requires parsing future frames.
#define AVFMT_FLAG_IGNIDX       0x0002 ///< Ignore index.
#define AVFMT_FLAG_NONBLOCK     0x0004 ///< Do not block when reading packets from input.
#define AVFMT_FLAG_IGNDTS       0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
#define AVFMT_FLAG_NOFILLIN     0x0010 ///< Do not infer any values from other values, just return what is stored in the container
#define AVFMT_FLAG_NOPARSE      0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
#define AVFMT_FLAG_NOBUFFER     0x0040 ///< Do not buffer frames when possible
#define AVFMT_FLAG_CUSTOM_IO    0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
#define AVFMT_FLAG_DISCARD_CORRUPT  0x0100 ///< Discard frames marked corrupted
#define AVFMT_FLAG_FLUSH_PACKETS    0x0200 ///< Flush the AVIOContext every packet.
/**
 * When muxing, try to avoid writing any random/volatile data to the output.
 * This includes any random IDs, real-time timestamps/dates, muxer version, etc.
 *
 * This flag is mainly intended for testing.
 */
#define AVFMT_FLAG_BITEXACT         0x0400
#define AVFMT_FLAG_MP4A_LATM    0x8000 ///< Enable RTP MP4A-LATM payload
#define AVFMT_FLAG_SORT_DTS    0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_PRIV_OPT    0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate.

#define AVFMT_FLAG_FAST_SEEK   0x80000 ///< Enable fast, but inaccurate seeks for some formats

相关文章

  • AVFMT_FLAG_NOBUFFER 对解码的影响

    之前看到一文章 ijkplayer秒开在使用它的配置之后,使用软解码怎么都是报 **Resource tempor...

  • 视频解析

    解码高分别率 如果图片分辨率太高,影响解码速率,可以采用降采样后再解码 参考opencv的pyrDown降采样接口...

  • kaldi+解码器详解2(实时流)

    下面是对kaldi音频文件解码的改造,用于实时流解码。

  • 软解码和硬解码的区别

    软解码和硬解码有什么区别?硬解码:由显卡核心GPU来对高清视频进行解码工作,CPU占用率很低,画质效果比软解码略差...

  • MediaCodec + SurfaceView 对Camera

    一、对预览数据编码 二、解码后将数据刷至SurfaceView 1、初始化解码器 2、解码

  • 僵尸病毒到底是血液病毒,还是神经性病毒?

    这个问题,《龙斌大话电影》的《科幻解码》专题曾经专门用1期谈过。 医学院博士毕业之后,受以前老师们的影响,本人对病...

  • urllib

    urllib 对url中的中文编解码

  • Fresco源码分析-图片解码

    图片编解码 在看Fresco对图片解码处理之前,先大致了解一下什么是图片与图片编解码。 图片编码与压缩 图像编码与...

  • Thinuna CD-6201A 双通道多媒体播放机

    专业的多媒体播放机, 双解码双显示屏设计,MP3和CD独立解码工作,互不干扰影响 光碟全面兼容MPEG4/DVD/...

  • 打卡第十二天

    读书笔记 解码生命 著者:[美]J.克雷格·文特尔 政治对科学的影响 人类基因测序本来是个多国合作,准备花费15年...

网友评论

    本文标题:AVFMT_FLAG_NOBUFFER 对解码的影响

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