- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
?
?
FFmpeg在基于Android的楼宇可视对讲程序中的应用
?
?
张阳吴朝霞
摘要:该文介绍了在基于Android的楼宇可视对讲应用程序中,保存对讲视频的意义和工作原理。并提出了将FFmpeg解决方案移植到Android系统中来,以完成对视频信息的编码和解码工作。该文主要分析了FFmepg的源代码和特点,讲述了如何将FFmepg中的有用部分移植到Android平台上,并通过JNI技术实tKAndroid应用层的调用,最终完成音视频的编码和解码工作。
关键词:Android;可视对讲;FFmpeg;视频编解码
1概述
在基于Android的楼宇可视对讲应用程序中,出于安保需求,室内机需要将单元门口机访客的视频信息保存并提交到管理中心机。如果保存未进行压缩过的音视频原码,则需要耗费大量的存储空间,也不利于视频文件的网络传输。而Android的类库并没有提供符合我們需求的视频编码功能,所以必须使用第三方解决方案来完成。而FFmpeg由于其高效、可移植,并且是完全免费的音视频流处理方案,成为了本文完成音视频编解码工作的首选。
2FFmpeg简介
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据开发人员选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。我们使用音视频编码是为了完成视频通话记录的音视频编码以方便保存。由于Android应用开发没有现成的音视频编码工具,我们只能使用cygwin+cdt+ndk的开发环境,编写自己的音视频编码动态链接库,FFmpeg为我们提供了高效的音视频编码方法。
3视频播放与实时编码方案
在室内机和单元门口机建立通信连接后,单元门口机通过其摄像头和麦克风捕获访客的音视频信息,视频信息为连续的jpeg图像,音频信息为PCM音频原码。接收到音视频信息后,室内机一边向用户播放实时视频,一边将其编码为MP4视频文件。音频编码为aac,音频位率:128kb/s。视频编码为mpeg4,视频位率为1200kb/s,视频尺寸为:320*180。通话结束后,室内机将MP4文件上传到管理中心机保存。其中音视频编码功能就是将FFmepg移植到Android平台下来实现的。通过An—droid底层C/C++驱动开发工具,将FFmpeg和自己的C语言代码编译成为后缀名为“.so”的动态链接库文件,添加到Android应用程序项目中,供应用层Java代码调用。实时可视对讲与音视频编码流程如图1所示。
4FFmpeg的JNI驱动开发
本文采用cygwin+CDT+NDK的开发环境进行Android动态链接库开发。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so文件和java应用一起打包成apk。要注意的是,因为cygwin是在Windows上模拟Linux的控制台环境,所以对于访问文件的路径是不能带有空格和中文的。所以ndk的解压后存放的路径必须不能包括空格或中文,比如这种“D:\rogramFiles\android-ndk-windows”在cygwin是不能识别成功的。FFmpeg源代码可以在其官网上免费下载,本文使用的是ffmpeg-0.8.1,FFmpeg的功能非常强大,几乎所有的音视频主流编解码方式都可以实现,而且代码效率非常的高,并且全部原码由C语言编写,可以非常方便的移植到An-dorid平台下。
此外,编写Android动态链接库需要使用JNI技术。C语言和Java之间有很多差别,比如基本数据类型就有很大差别,Java有类和对象的概念,而C没有。想要Java调用C编写的方法,需要JNI作为桥梁,JNI的主要作用就是规定了如何用Java调用C方法,c访问Java调用者传递的形式参数等等相互操作。根据JNI规定,我们需要自己编写的源文件“avjni.c”,用来向下实现对FFmpeg的调用,向上提供Android应用层调用的接口函数。其中编译脚本Android.mk如下所示:
电脑知识与技术2017年12期
电脑知识与技术的其它文章
液体透镜光学性质的仿真分析
基于PierreDellacherie算法的俄罗斯方块游戏的研究和实现
浅谈培养学习计算机兴趣的方法
基于C语言的DSP程序设计研究
基于WAMP技术的员工信息管理系统设计与实现
应用微课计算机技术做好翻转课堂教学
?
-全文完-
文档评论(0)