zoukankan      html  css  js  c++  java
  • FFmpeg(4)-使用avformat_find_stream_info()来探测获取封装格式的上下文信息

    /**
     * Read packets of a media file to get stream information. This
     * is useful for file formats with no headers such as MPEG. This
     * function also computes the real framerate in case of MPEG-2 repeat
     * frame mode.
     * The logical file position is not changed by this function;
     * examined packets may be buffered for later processing.
     *
     * @param ic media file handle
     * @param options  If non-NULL, an ic.nb_streams long array of pointers to
     *                 dictionaries, where i-th member contains options for
     *                 codec corresponding to i-th stream.
     *                 On return each dictionary will be filled with options that were not found.
     * @return >=0 if OK, AVERROR_xxx on error
     *
     * @note this function isn't guaranteed to open all the codecs, so
     *       options being non-empty at return is a perfectly normal behavior.
     *
     * @todo Let the user decide somehow what information is needed so that
     *       we do not waste time getting stuff the user does not need.
     */
    int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);

    该函数主要用于获取视频流信息。

    在一些格式当中没有头部信息,如flv格式,h264格式,这个时候调用avformat_open_input()在打开文件之后就没有参数,也就无法获取到里面的信息。这个时候就可以调用此函数,因为它会试着去探测文件的格式,但是如果格式当中没有头部信息,那么它只能获取到编码、宽高这些信息,还是无法获得总时长。如果总时长无法获取到,则仍需要把整个文件读一遍,计算一下它的总帧数。

    例:

    if (avformat_find_stream_info(ic, 0) >=0 ) {
            LOGI("duration is: %lld, nb_stream is: %d", ic->duration, ic->nb_streams);
    }

    其中的ic就是 AVFormatContext 的指针。

  • 相关阅读:
    外部排序分析
    C++读写CSV文件
    springMVC之annotation优化
    用Scertify Professional实现代码审查
    flash与字符串:字符串与属性
    题目描述:字符串查找
    matlab遗传算法
    开发传感器应用
    Java 高效 MVC & REST 开发框架 JessMA v3.2.1 即将发布
    基于drools创建自己的关系操作符
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/9797128.html
Copyright © 2011-2022 走看看