S3C6410 MFC视频硬件解码
2011-03-01 14:50
204 查看
做了一个星期的s3c6410,有很多弄懂得,也有很多没清楚的,感觉比较混乱,还是理一下思路。
0. 知识点
1. 视频解码的整个流程大致如下:
说明了视频文件解码的整个过程,而在做s3c6410硬件解码中,我们需要关注的是怎样把一个视频文件(avi/mkv/mp4)拿来,然后做demuxer变成raw video stream,接着就能输入到硬件中:
得到raw video后视频解码的整个过程,在编写过程中主要用到的API以及包含的文件如下图:
单纯的从raw video到播放比较简单,大部分的api都有了根据demo的程序改改,就可以基本解决了。
但还是有很多没搞定的:
1. 解复用demux这部分,我用ffmpeg来分流,avi格式的文件直接获取流以后,
while(av_read_frame(pFormatCtx, &packet) >= 0)
{
if(packet.stream_index == videoStream)
{}}
就可以一帧一帧的把他导入到另外一个文件中,然后就是可以播放的,但是ISO Media的就不行,mkv也不行。不知道是不是跟video container的格式有关。
2. 在硬件解码过程中,manual中说了,S3C6410 MFC codec支持两种模式的输入流(LINE_BUF和RING_BUF)。
LINE_BUF是the application needs to fill the input buffer with the video stream of the exact size of one frame.
RING_BUF是the application needs to fill the input buffer with the video stream of the size of PART. The size of PART is determined by the device driver.
但什么时候用RING_BUF什么时候用LINE_BUF我没弄明白。LINE_BUF, RING_BUF支持4种流解码的,而我在样例程序中使用的是LINE_BUF,测试的视频却是m4v, 264, rcv(上表中用ring_buf)。对这两个模式认识非常混乱。有待进一步研究。
感谢:http://qwdu.cublog.cn/
仔细看下MFC的那几个文档就可以了,文件封装的H264可能需要自己做demuxer,那个文档里面里面有提,ring buf模式支持文件封装的数据,我没测试,linebuf只支持标准的es流,我是用mplayer把文件demuxer出来的h264数据送到 linebuf模式的mfc,这样来测试的。
网络上取H264数据,是rtp/udp还是http?反正都是文件封装的问题,最好用基本的es 流,如果没有文件封装,那需要在本地解析组装NAL
在
ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.
PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.
TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表.
(在MPEG-2系统中,由视频, 音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流)
封装 : 就是捆绑打包, 将画面视频文件和音轨文件打包在一起, 并按照一定规则建立排序和索引, 便于播放器或播放软件来索引播放. 包括AVI / PS(Program Stream)/ TS(Transport Stream)/ MKV(Matroska)等.
0. 知识点
1. 视频解码的整个流程大致如下:
说明了视频文件解码的整个过程,而在做s3c6410硬件解码中,我们需要关注的是怎样把一个视频文件(avi/mkv/mp4)拿来,然后做demuxer变成raw video stream,接着就能输入到硬件中:
得到raw video后视频解码的整个过程,在编写过程中主要用到的API以及包含的文件如下图:
单纯的从raw video到播放比较简单,大部分的api都有了根据demo的程序改改,就可以基本解决了。
但还是有很多没搞定的:
1. 解复用demux这部分,我用ffmpeg来分流,avi格式的文件直接获取流以后,
while(av_read_frame(pFormatCtx, &packet) >= 0)
{
if(packet.stream_index == videoStream)
{}}
就可以一帧一帧的把他导入到另外一个文件中,然后就是可以播放的,但是ISO Media的就不行,mkv也不行。不知道是不是跟video container的格式有关。
2. 在硬件解码过程中,manual中说了,S3C6410 MFC codec支持两种模式的输入流(LINE_BUF和RING_BUF)。
LINE_BUF是the application needs to fill the input buffer with the video stream of the exact size of one frame.
RING_BUF是the application needs to fill the input buffer with the video stream of the size of PART. The size of PART is determined by the device driver.
但什么时候用RING_BUF什么时候用LINE_BUF我没弄明白。LINE_BUF, RING_BUF支持4种流解码的,而我在样例程序中使用的是LINE_BUF,测试的视频却是m4v, 264, rcv(上表中用ring_buf)。对这两个模式认识非常混乱。有待进一步研究。
感谢:http://qwdu.cublog.cn/
仔细看下MFC的那几个文档就可以了,文件封装的H264可能需要自己做demuxer,那个文档里面里面有提,ring buf模式支持文件封装的数据,我没测试,linebuf只支持标准的es流,我是用mplayer把文件demuxer出来的h264数据送到 linebuf模式的mfc,这样来测试的。
网络上取H264数据,是rtp/udp还是http?反正都是文件封装的问题,最好用基本的es 流,如果没有文件封装,那需要在本地解析组装NAL
在
ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.
PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.
TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表.
(在MPEG-2系统中,由视频, 音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流)
封装 : 就是捆绑打包, 将画面视频文件和音轨文件打包在一起, 并按照一定规则建立排序和索引, 便于播放器或播放软件来索引播放. 包括AVI / PS(Program Stream)/ TS(Transport Stream)/ MKV(Matroska)等.
相关文章推荐
- vlc加入s3c6410 MFC硬件解码器,PP视频输出
- vlc加入s3c6410 MFC硬件H264, MPEG4解码器,PP视频输出(一)
- h264解码器,s3c6410硬件mfc解码分析-H264
- h264解码器,s3c6410硬件mfc解码分析-H264
- s3c6410硬件mfc解码分析-H264
- h264解码器,s3c6410硬件mfc解码分析-H264
- h264解码器,s3c6410硬件mfc解码分析-H264
- 三星 mfc 视频 硬件 编解码 终于搞定
- h264解码器,s3c6410硬件mfc解码分析-H264
- 分配input port buffers、提取视频文件压缩数据、复制压缩数据到input buffer、H.264硬件解码器开始解码过程分析
- VideoToolbox硬件编解码H.264视频流错误码
- 嵌入式Linux下基于FFmpeg的视频硬件编解码
- GStreamer播放教程08——视频解码的硬件加速
- iOS8系统H264视频硬件编解码说明
- iOS8系统H264视频硬件解码Demo
- iOS8系统H264视频硬件编解码说明
- 嵌入式Linux下基于FFmpeg的视频硬件编解码
- 基于NVIDIA TEGRA系列板卡的硬件解码及视频推流
- S3C6410 硬件JPEG解码无关代码影响解码问题终于得以解决
- 硬件编解码(七)Intel提供的QuickSync使用样例(4)视频编码