我的播放器0---音视频基础

2020-08-19 18:03:52 浏览数 (1)

Mpeg4封装格式音视频编码格式

MPEG-4

MPEG-4是一套用于音频、视频信息的压缩编码标准。

MPEG-4 Part 14定义了MPEG-4文件格式,即mp4后缀文件。mp4文件格式只是MPEG-4标准中的一小部分

常用封装格式

AVI 压缩标准可任意选择

FLV ts流媒体格式

ASF

mp4 MPEG-4中定义的一种格式

常用编码格式

视频:H264(AVC Part10) , wmv, XviD(Part2), mjpeg(每一帧都是独立的,都是I帧)

音频:aac(有损压缩), MP3(有损), ape(无损), flac(无损)

音视频解封装和解码原理分析

image.pngimage.png

像素格式

YUV比RGB更省空间

由于GPU擅长浮点运算, 所以YUV转RGB可以用openGL的shader做,性能好

image.pngimage.png

3*3 RGB图像存放方式

image.pngimage.png

如果视频宽度不是4或者8的倍数,程序为了运算效率,会自动补齐,所以拷贝时要一行行拷贝,根据图像时间宽度。

YUV

image.pngimage.png
  • YUV444与RGB占用空间一样,都是每个像素3个字节
  • YUV420,四个Y共用一个UV,不是连续的Y共用,而是2*2的矩阵Y,共用UV
  • Packed模式YUVYUVYUV ;Planar模式YYYUUUVVV,使用时,Packed模式存储在一个数组中,Planar模式存储在三个数组中。

PCM音频参数

  • 采样率 sample_rate 44100 (CD)
  • 通道 channels (左右声道)
  • 样本大小(格式) sample_size enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, ///< unsigned 8 bits AV_SAMPLE_FMT_S16, ///< signed 16 bits AV_SAMPLE_FMT_S32, ///< signed 32 bits AV_SAMPLE_FMT_FLT, ///< float AV_SAMPLE_FMT_DBL, ///< double AV_SAMPLE_FMT_FLTP, ///< float,planar }; 我们大部分声卡只支持16位或24位样本大小,而aac解码出来的是AV_SAMPLE_FMT_FLTP格式,32位浮点值(浮点运算效率高)
  • Packed模式LRLRLR ;Planar模式LLLRRR
  • 倍速播放,改变播放采样率和原始采样率的关系

MP4标准和h264格式的NAL的GOP分析

image.pngimage.png

编码格式及细节

https://cloud.tencent.com/developer/article/1638143 该链接比较详细

image.pngimage.png

android studio SDK目录

image.pngimage.png

windows获取当前毫秒时间戳

image.pngimage.png

设置解码线程数

骁龙835 硬解码 FPS 120帧

骁龙835 软解码 1线程 neon FPS 60

骁龙835 软解码 8线程 neon FPS 250

骁龙835 软解码 1线程 无neon FPS 30

骁龙835 软解码 8线程 无neon FPS 140

image.pngimage.png

硬解码和软解码

image.pngimage.png

硬解码需要加上这个函数,不需要手动调用,java加载时会自动调用

image.pngimage.png
image.pngimage.png

0 人点赞