zoukankan      html  css  js  c++  java
  • 视频专家之路【四】:ffmpeg简单实战之获取属性

     本文是听了雷宵骅大神的课之后的总结,部分内容借用了其PPT的内容,如有侵权请告知删除。

    雷宵骅大神的博客为:https://blog.csdn.net/leixiaohua1020

    本节的目的正式开始接触ffmpeg的API,来使用其API来获取属性


    ffmpeg接口的常规操作:


     原来在视频专家之路【一】:音视频入门知识基础 这一节中提到过播放器在播放视频时采取的所有动作,将其和ffmpeg的API接口对应起来,如下图所示。

       

    其实在ffmpeg的处理中也是严格按照该流程去执行的。

    现在对这些接口进行讲解。

    • av_register_all:注册所有组件,一般流程上开头都是这个函数
    • avformat_open_input:打开视频文件
    • avformat_find_stream_info:找到流信息
    • avcodec_find_decoder:找到解码器
    • avcodec_open2:打开解码器
    • av_read_frame:读取帧
    • avcodec_decode_video2:开始解码

    ffmpeg中的常用结构体解析


     先给一张总体的结构体图

    AVFormatContext(封装格式上下文结构体,统领全局的结构体)

    • iformat:输入视频的AVInputFormat
    • nb_streams:输入视频的AVStream个数
    • streams:输入视频的AVStream[]数组
    • duration:输入视频的时长
    • bit_rate:输入视频的码率

    AVInputFormat(每种封装格式例如FLVMKVMP4AVI对应一个该结构体)

    • name:封装格式
    • long_name:封装格式的长名称
    • extensions:封装格式的扩展名
    • id:封装格式ID
    • 一些封装格式处理的函数接口

    AVStream(视频文件中每个视频/音频流对应一个该结构体)

    • id:序号
    • codec:该流对应的AVCodecContext
    • time_base:该流的时基
    • r_frame_rate:该流的帧率

    AVCodecContext(编解码器上下文结构体,保存了视频/音频编解码相关信息)

    • codec:编解码器的AVCodec
    • width,height:图像的宽高(只针对视频)
    • pix_fmt:x像素格式(只针对视频)
    • sample_rate:采样率(只针对音频)
    • channels:声道数(只针对音频)
    • sample_fmt:采样格式(只针对音频)

    AVCodec(每种视频/音频编解码器例如H.264解码器对应一个该结构体)

    • name:编解码器名称
    • long_name:编解码器长名称
    • type:编解码器类型
    • id:编解码器ID
    • 一些编解码的接口函数

    AVPacket(存储一帧压缩编码数据)

    AVFrrame(存储一帧解码后像素/采样数据)

    附件:过程中遇到的问题及解决


     1.av_register_all被声明为已否决

    根据网上查到的答案,出现这种现象的原因是可能未来这个接口会被替换,但是我在其声明中并没有找到替换的接口,所以采取了另一种方式

    如下图所示:

  • 相关阅读:
    4KB对齐
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    策略设计模式与c语言中的函数指针
    包装类类值传第
    java的 clone方法
    ubuntu中maven建的web项目不能将project facet设置为 dynamic web module 3.0
    maven 笔记
    eclipse中xml文件不能自动提示的解决办法
    oracle merge into 的例子
    oracle 常用sql
  • 原文地址:https://www.cnblogs.com/codescrew/p/9130578.html
Copyright © 2011-2022 走看看