• 视频专家之路【四】: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被声明为已否决

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

    如下图所示:

  • 相关阅读:
    LAMP动态网站安装脚本
    图片上传
    如何用qq代理发送邮件
    初识c#
    Eclipse使用技巧
    maven中 install的install:install的区别
    Git的各种状态
    phpStorm中Structure窗口中的符号代表的意思
    Apache+PHP+MySQL+phpMyAdmin+WordPress搭建
    Session重点整理
  • 原文地址:https://www.cnblogs.com/codescrew/p/9130578.html
Copyright © 2020-2023  润新知