嵌入式linux下基于ffmpeg的视频硬件编解码

嵌入式linux下基于ffmpeg的视频硬件编解码

ID:9144501

大小:91.00 KB

页数:11页

时间:2018-04-19

嵌入式linux下基于ffmpeg的视频硬件编解码_第1页
嵌入式linux下基于ffmpeg的视频硬件编解码_第2页
嵌入式linux下基于ffmpeg的视频硬件编解码_第3页
嵌入式linux下基于ffmpeg的视频硬件编解码_第4页
嵌入式linux下基于ffmpeg的视频硬件编解码_第5页
资源描述:

《嵌入式linux下基于ffmpeg的视频硬件编解码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式Linux下基于FFmpeg的视频硬件编解码引言目前,智能手机、pda和平板电脑等越来越多的嵌入式设备支持高清视频采集和播放功能,高清视频的采集或播放功能正广泛用丁游戏设备、监控设备、视频会议设备和数字网络电视等嵌入式系统中。这些功能的实现建立在高性能视频硬件编解码技术基础之上。木文阐述了基于FFmpeg的H.264视频硬件编解码在S3C6410处理器上的实现方法,为数字娱乐、视频监控和视频通信系统开发过程中的高清视频硬件编解码的实现提供参考。FFmpeg[l]是一个开源免费跨平台的视频和音频流方案,属于自由软件。它包含非常先进的音频/视频

2、编解码库libavcodec,提供了录制、转换以及流化音视频的完整解决方案。FFmpeg支持MPEG4、FLV等40多种编码,以及AVI、ASF等90多种解码。0前国内较为流行的播放器暴风影音和国外较为流行的Mplayer在音频/视频编解码方面都用到了FFmpeg。S3C6410[2]是三星公司推出的应用处理器芯片,基于ARM11架构,主频最高可达800MHz。它具有多媒体硬件加速功能,其中包括大于30fps的MPEG4SP、H.264/263BP和VC1(WMV9)多种视频硬件编解码,可用于手机、平板电脑和游戏机等手持移动设备和其他高性能嵌入式

3、设备。国产手机魅族M8的处理器使用的就是S3C6410。虽然FFmpeg提供了简单的应用程序编程接门(API),可以很方便地实现多种格式的视频软件编解码[3],但是软件编解码在处理复杂视频编解码(如H.264)时无法运用到处理速度不快、内存空间不多的嵌入式环境中。为了在资源有限的嵌入式环境下使用FFmpeg实现复杂视频编解码,下面在分析FFmpeg视频编码流程和S3C6410处理器视频编解码方法的基础上,阐述嵌入式Linux操作系统下基于FFmpeg的H.264硬件编解码在S3C6410处理器上的实现力法。1FFmpeg视频编解码流程FFmpeg

4、主要有encode/decode、muxer/demuxer和内存操作3个模块。encode/decode模块用于音视频的编码和解码,存放在libavcodec了目录中;muxer/demuxer模块用于音频和视频的合并与分离(也称混合器模快),存放在libavformat0录中;内存等常用模块存放于libavutil目录中。下以解码过程为例分析FFmpeg视频编解码流程。解码基本流程共分4步:①注册所有可能用到的编解码器和混合器。aV_regiSter_all(VOid)函数中通过执行REGISTER_MUXDEMUX(X,x}和REGISTE

5、R_ENCDEC(X,x),把所有FFmpeg支持的混合器和编解码器相关信息以链式的结构存放在内存中。②打幵视频文件。av_open」nput_file(AVFormatContext**ic_ptr,constchar*filename/AVInputFormat*fmt,intbuf_size,AVFormatParameters*ap)函数中侦测文件的格式,根据文件格式从链式的混合器中找到相对应的混合器(demuxer)并分离出视频信息。③获取视频信息。通过av_find_stream_info(AVFormatContext*ic)函数获

6、取视频格式。根据视频格式,在链式的视频解码器中找到相应的视频解码器,并通过avcodec__open(AVCodecContext*avctx,AVCodec*codec)函数将解码器打开用于下一步视频的解码。④解码一巾贞视频,通过avcodec_decode_video(AVCodecContext*avctx,AVFrame*picture,int*got_picture_ptr,constuint8_t*buf,intbuf一size)函数解码一帧视频。FFmpeg的编码过程与解码过程类似,不同的是第3步根据要求编码的格式在链式的视频编码器

7、中找到相应的视频编码器,并执行编码过程。通过以上对FFmpeg视频编解码流程分析可以知道,为了在FFmpeg中添加自定义的视频编解码器,并在程序运行时使用这个编解码器,关键在于如下两点:①根据FFmpeg对编解码器的描述,实现自定义编解码器。②通过REGISTER_ENCDEC(X,x)函数将自定义的视频编解码器添加到视频编解码器链屮。在获取视频信息时,保证需要编码或解码的视频能找到视频编解码器链中自定义的视频编解码器。2S3C6410处理器视频编解码方法S3C6410视频编解码软件架构[4]。底层为操作系统空间,上层为用户空间,视频编解码器通过

8、驱动和操作系统以设备文件的形式使用,使用的方法和普通文件一样,包括文件打开和关闭、文件读写和输入/输出控制(ioctl'input/ou

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。