美文网首页
JNI——FFmpeg简单的解封装、解码

JNI——FFmpeg简单的解封装、解码

作者: 追寻米K | 来源:发表于2018-10-10 23:11 被阅读0次

    关于音视频相关的知识非常多,建议去看看雷神的blog。介绍了很多基础知识,站在巨人的肩膀上。

    通常看见的视频格式mp4、avi、rmvb等是把视频和音频按照一定的格式封装的结果称为封装格式,我们看到的有画面有声音的视频实际上视频和声音都是单独的,只是把两个做了同步。

    原始的视频像素数据(RGB,YUV等)是会被压缩成视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

                                                主要视频编码一览

    H.264仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的

    数据压缩分类

      ● 无损压缩(Lossless)

          ○ 压缩前解压缩后图像完全一致X=X'

          ○ 压缩比低(2:1~3:1)

          ○ 例如:Winzip,JPEG-LS

      ● 有损压缩(Lossy)

          ○ 压缩前解压缩后图像不一致X≠X'

          ○ 压缩比高(10:1~20:1)

          ○ 利用人的视觉系统的特性

          ○ 例如:MPEG-2,H.264/AVC,AVS

            空间压缩:比如 一块红色区域,原本有1000个红色像素,现在只要200个就能显示这块红色区域。

            时间压缩:比如电影中一副画面停顿了10s,只需要一帧画面来描述这10s,不用原来的全部画面,因为画面都一样。

            编码压缩:定长编码和变长编码。

    更详细的压缩解释

    上面是视频播放的整个流程,如果在线播放就需要先解协议,播放本地视频就不要这一步。播放器需要把压缩的视频数据,解压成原始数据再进行播放。

    下面就实现一个小功能,把封装的MP4视频解封装然后解码成原始的YUV格式数据

    给结构体AVPacket分配内存,并初始化,但是结构体中的视频数据是空的,也要先给视频数据分配内存(缓冲区)avpivture_fill 来实现这个功能,后面才能在这个缓冲区中添加数据

    相关文章

      网友评论

          本文标题:JNI——FFmpeg简单的解封装、解码

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