视频播放器原理

本文部分资源来自雷神博客


视频播放器播放一个在线视频需要经过以下几个步骤。

视频播放器原理_第1张图片

协议:从原始的流媒体协议数据中去掉信令数据只保留音视频数据,如采用RTMP协议传输的数据,经过解协议后输出flv格式的数据。

解封装:分离音频压缩编码数据和视频压缩编码数据,常见的封装格式mp4,mkv,rmvb,ts,flv,avi这些格式的作用就是将已经压缩编码的视频数据和音频数据放到一起,例如FLV格式的数据经过解封装后输出H.264编码的视频码流和AAC编码的音频码流。

解码:将视频,音频压缩编码数据,还原成非压缩的视频,音频原始数据,音频的压缩编码标准包括AAC,MP3,AC-3等,视频压缩编码标准包含H.264,MPEG2,VC-1等,经过解码

得到非压缩的视频颜色数据如YUV420P,RGB和非压缩的音频数据如PCM等。

音视频同步:将同步解码出来的音频和视频数据分别送至系统声卡和显卡播放。


ffmpeg架构

视频播放器原理_第2张图片

ffmpeg解码流程

视频播放器原理_第3张图片

1. 注册所有容器格式和CODEC:av_register_all()
2. 打开文件:av_open_input_file()
3. 从文件中提取流信息:av_find_stream_info()
4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO
5. 查找对应的解码器:avcodec_find_decoder()
6. 打开编解码器:avcodec_open()
7. 为解码帧分配内存:avcodec_alloc_frame()
8. 不停地从码流中提取出帧数据:av_read_frame()
9. 判断帧的类型,对于视频帧调用:avcodec_decode_video()
10. 解码完后,释放解码器:avcodec_close()
11. 关闭输入文件:av_close_input_file()


你可能感兴趣的:(ffmpeg学习记录)