嵌入式Linux下基于FFmpeg的视频硬件编解码.docxVIP

嵌入式Linux下基于FFmpeg的视频硬件编解码.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux下基于FFmpeg的视频硬件编解码 引言 目前,智能手机、pda和平板电脑等越来越多的嵌入式设备支持高清 视频釆集和播放功能,高清视频的采集或播放功能正广泛用于游戏设备、监 控设备、视频会议设备和数字网络电视等嵌入式系统中。这些功能的实现 建立在高性能视频硬件编解码技术基础之上。本文阐述了基于FFmpeg的 H.264视频硬件编解码在S3C6410处理器上的实现方法,为数字娱乐、视频 监控和视频通信系统开发过程中的高清视频硬件编解码的实现提供参考。 FFmpeg[l]是一个开源免费跨平台的视频和音频流方案,属于自由软件。 它包含非常先进的音频/视频编解码库libavcodec,提供了录制、转换以及 流化音视频的完整解决方案。FFmpeg支持MPEG4、FLV等40多种编码, 以及AVI、ASF等90多种解码。EI前国内较为流行的播放器暴风影音和国 外较为流行的Mplayer在音频/视频编解码方面都用到了 FFmpeg。 S3C6410⑵是三星公司推出的应用处理器芯片,基于ARM11架构,主 频最高可达800MHZo它具有多媒体硬件加速功能,其中包括大于30 fps 的MPEG4 SP、H.264/263 BP和VC1(WMV9)多种视频硬件编解码,可用于 手机、平板电脑和游戏机等手持移动设备和其他高性能嵌入式设备。国产 手机魅族M8的处理器使用的就是S3C6410o 虽然FFmpeg提供了简单的应用程序编程接口(API),可以很方便地实 现多种格式的视频软件编解码[3],但是软件编解码在处理复杂视频编解码 (如H.264)时无法运用到处理速度不快、内存空间不多的嵌入式环境中。 为了在资源有限的嵌入式环境下使用FFmpeg实现复杂视频编解码,下面 在分析FFmpeg视频编码流程和S3C6410处理器视频编解码方法的基础上, 阐述嵌入式Linux操作系统下基于FFmpeg的H.264硬件编解码在S3C6410 处理器上的实现方法。1 FFmpeg视频编解码流程 FFmpeg 主耍有 encode/decode muxer/demuxer 和内存操作 3 个模块。 encode/decode模块用于音视频的编码和解码存放在libavcodec 了目录中; muxer/demuxer模块用于音频和视频的合并与分离(也称混合器模块),存 放在libavformat H录中;内存等常用模块存放于libavutil H录中。下血以 解码过程为例分析FFmpeg视频编解码流程。 解码基本流程共分4步: 注册所有可能用到的编解码器和混合器。av_register_all(void)?数 中通过执行 REGISTER_MUXDEMUX(X,x)和 REGISTER_ENCDEC(X,x),把所有 FFmpeg支持的混合器和编解码器相关信息以链式的结构存放在内存中。 打开视频文件。av_open」nput_file(AVFormatContext **ic_ptr,const char *filenamezAVInputFormat nt buf_size,AVFormatParameters *ap)函 数中侦测文件的格式,根据文件格式从链式的混合器中找到相对应的混合 器(demuxer)并分离出视频信息。③ 获取视频信息。通过 av_find_stream_info(AVFormatContext *ic)函数获取视频格式。根据视频格 式,在链式的视频解码器中找到相应的视频解码器,并通过 avcodec_open(AVCodecContext *avctx,AVCodec *codec)函数将解码器打开 用于下一步视频的解码。 ④解码一帧视频,通过 avcodec_decode_video(AVCodecContext *avctx,AVFrame *picture,int *got_picture_ptr,const uint8_t *buf,int buf_size) 函数解码一帧视频。FFmpeg的编码过程与解码过程类似,不同的是第3 步根据要求编码的格式在链式的视频编码器中找到相应的视频编码器,并 执行编码过程。 通过以上对FFmpeg视频编解码流程分析可以知道,为了在FFmpeg 中添加自定义的视频编解码器,并在程序运行时使用这个编解码器,关键 在于如下两点: 根据FFmpeg对编解码器的描述,实现自定义编解码器。 通过REGISTER_ENCDEC(X,x)函数将自定义的视频编解码器添加到 视频编解码器链屮。在获取视频信息时,保证需耍编码或解码的视频能找 到视频编解码器链中自定义的视频编解码器。 2 S3C6410处理器视频编解码方法 S3C6410视频编解码软件架构⑷。底层为操作系统空间,上层为用户 空间,视频

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档