0
点赞
收藏
分享

微信扫一扫

MultiMedia知识汇总

年夜雪 2022-02-03 阅读 75
android
  1. MediaCodec相关
    crop信息(x,y,m,n)左上坐标(x,y) 右下坐标(m,n),也就是解码宽高,宽=m-x+1,高=y-n+1
    mediacodec的状态:(思考一下如果你创建mediacodec要做那些事情)
    1.创建mediacodec后,处于uninitialized状态
    2.config后,configured状态
    3.start后,flushed状态,此时会清空所有buffer
    4.buffer队列拿到第一个buffer时,进入running状态
    5.stream带有eos标志时,进入eos状态
    6.调用stop后,uninitialized状态
    codec specific data 数据(h264/h265解码器要求的数据)
    1.mediacodec要求的,所有正常数据来之前,必须先有csd数据
    2.其中包含一些sps,pps信息,用于初始化、配置解码器参数等
    H264 csd-0放sps信息、csd-1放pps信息
    H265 只有csd-0,放sps、pps信息
    MediaFormat参数中,很多需要配置的信息,都是在编码的时候才需要的,如framerate key-frame等信息,解码时候配置的参数不多
    mediacodec常用操作
    1.dequeueInputBuffer 返回一个空buffer的index
    2.getInputBuffer(index) 返回对应index的buffer地址
    3.queueInputBuffer 填充好数据之后,将数据送到mediacodec
    4.dequeueOutputBuffer 获取解码器输出的buffer
    5.releaseOutputBuffer 把buffer还给mediacodec
    使用surface效率会高很多,dequeuOutputBuffer之后,直接releaseOutputBuffer,解码数据无需拷贝到java侧,直接在native侧送给surface,省去copy动作,效率提高
  2. MP4组成
    mp4由各种box组成,每种不同box的功能不一样
    首先由一个ftype box,包含文件的一些信息
    其次是moov box,里面包含了很多子box,meta-data信息等
    媒体数据包含在mdat信息中,也包含了很多子box
    ftyp file type 文件版本,协议等信息
    moov movie box 不包含具体数据,只包含对应信息
    mdat meta data box 存放解码播放的数据
  3. ffmpeg
    常见的视频格式:h264/h265/vp8/vp9/
    ffmpeg框架包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtils等几个,重要的是前2个
    libavcodec:存放各编解码器模块
    libavformat:存放muxer/demuxer模块,各种音视频封装格式的生成和解析,包括获取解码所需的信息和生成
    解码上下文的结构和读取音视频帧的功能,音视频的格式解析协议
    libavutil:内存操作等模块,一些公共工具函数使用库,如内存等
    libswscale:视频缩放、色彩转换,视频格式转换等
    FFmpeg数据结构
    AVFormatContext 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。
    iformat:输入视频的AVInputFormat
    nb_streams :输入视频的AVStream 个数
    streams :输入视频的AVStream []数组
    duration :输入视频的时长(以微秒为单位)
    bit_rate :输入视频的码率
    AVInputFormat 每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
    name:封装格式名称
    long_name:封装格式的长名称
    extensions:封装格式的扩展名
    id:封装格式ID
    一些封装格式处理的接口函数
    AVStream 视频文件中每个视频(音频)流对应一个该结构体。
    id:序号
    codec:该流对应的AVCodecContext
    time_base:该流的时基
    r_frame_rate:该流的帧率
    AVCodecContext编码器上下文结构体,保存了视频(音频)编解码相关信息。
    codec:编解码器的AVCodec
    width, height:图像的宽高(只针对视频)
    pix_fmt:像素格式(只针对视频)
    sample_rate:采样率(只针对音频)
    channels:声道数(只针对音频)
    sample_fmt:采样格式(只针对音频)
    AVCodec 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
    name:编解码器名称
    long_name:编解码器长名称
    type:编解码器类型
    id:编解码器ID
    一些编解码的接口函数
    AVPacket 存储一帧压缩编码数据。
    pts:显示时间戳
    dts :解码时间戳
    data :压缩编码数据
    size :压缩编码数据大小
    stream_index :所属的AVStream
    AVFrame存储一帧解码后像素(采样)数据。
    data:解码后的图像像素数据(音频采样数据)。
    linesize:对视频来说是图像中一行像素的大小;对音频来说是音频帧的大小。
    width, height:图像的宽高(只针对视频)。
    key_frame:是否为关键帧(只针对视频) 。
    pict_type:帧类型(只针对视频) 。例如I,P,B。
举报

相关推荐

0 条评论