基于Android系统的视频播放器开发_马建设

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0


2. 1
Android 是一种以 Linux 为基础的开源操作系统, 以其友好 的用户界面和极佳的操作体验赢得了广大用户的青睐 。随着信 息化技术的发展以及生活水平的提高, 用户对移动终端的多媒 。 Android 体功能提出了更高的要求 然而, 系统仅支持较少的几 种视频格式
[1 ]
整体方案
与传统的数学建模方法相比, 其预测精度较高, 能较好地反映水 质指标的内在变化规律, 如果训练数据更加充足, 神经网络可达 到更好的预测能力, 为控制水环境污染控制提供科学支持 。
河流名称 小溪港 直湖港 梁溪河 洪巷港 殷村港 乌溪港 大浦港 陈东港 官渎港 社渎港 武进港 太鬲运河 苏东河 胥江 浒光河 木光河 望虞河 吴淞江 太浦河 合溪

2005. 京:南京师范大学,



[1 ] 张亦含. 基于 GIS 的太湖水环境质量时空变异规律研究[D] .南 [2 ] 郭庆春, 何振芳, 李力, 等. BP 神经网络模型在太湖水污染指标预 J] . 计算机应用研究, 2011 , 42 ( 10 ) : 13031306. 测中的应用[ [3 ] Long C S, Wang X, Wu D H, et al. A Recognition Model of Hand Odor Based on BP Artificial Network [J]. Computer Science and Application, 2012 , 2 ( 2 ) :5760. [4 ] Wu Q T, Yang X T, Hua B. Evaluation of Network Connection Credibility based on Neural Network[J] . Journal of Computers,2011 ,6 ( 12 ) :25672573. [5 ] 姚云, 郑世清, 沈志良. 利用人工神经网络评价胶州湾水域富营养 J] . 海洋环境科学, 2002 , 27 ( 1 ) : 1012. 化水平[ [6 ] 高振美, 张波, 商景阁, 等. 太湖流域小型水源性湖泊氮 、 磷时空分 J] . 环境污染与防治, 2012 , 34 ( 1 ) :914. 布及营养状态评价[ [7 ] 郝中华. BP 神 经 网 络的 非线性 思 想[J]. 洛 阳 师 范 学 院 学 报, 2008 , 4 ( 1 ) :5155. [8 ] 董 长 虹. Matlab 神 经 网 络 与 应 用[M] . 北 京: 国 防 工 业 出 版 2005. 社, [9 ] 彭金涛, 王莉, 杨玖贤, 等. 人工神经网络模型在河流减水河段景观 J] . 水电站设计, 2011 , 27 ( 4 ) : 7782. 质量评价中的作用[ [ 10] 麦克 K. ArcGIS 地理信息系统[M]. 蒋波涛, 袁娅娅, 译. 2 版. 北 2011. 京: 清华大学出版社,
图5 视频播放效果
( 下转第 175 页)
第 11 期
表5
马正华等:BP 神经网络模型在太湖出入湖河流水质预测中的应用
175
2005 年太湖出入湖河道综合污染指数神经网络计算结果 断面名称 小溪港 湖山桥 蠡桥 洪巷桥 殷村港 乌溪港 大浦港 陈东港 官渎港 社渎港 戴溪桥 黄埝桥 越溪桥 航管站 虎山桥 善人桥 312 国道桥 瓜泾口西 太浦闸 合溪 综合污染指数( mg / L) 1. 3249 1. 8694 1. 4784 0. 6539 1. 325 0. 5634 0. 8758 0. 9704 0. 8409 1. 2167 1. 5743 1. 7332 1. 8593 0. 6426 1. 6543 0. 5684 0. 7784 0. 6448 0. 4855 0. 4989 污染等级 Ⅴ Ⅴ Ⅴ Ⅲ Ⅴ Ⅲ Ⅳ Ⅳ Ⅳ Ⅴ Ⅴ Ⅴ Ⅴ Ⅲ Ⅴ Ⅲ Ⅳ Ⅲ Ⅲ Ⅲ

图4 图2 视频播放原理框图
声音输出流程图
( 4 ) 音视频同步 音视频同步有三种选择:同步音频到视频, 同步视频到音频 以及音视频同步到外部时钟 。本方案中的音视频同步采用第二 种:同步视频到音频。在音视频流的包中有 DTS ( Decoding Time DTS 用来指示解码时 Stamp) 和 PTS ( Presentation Time Stamp ) , 间, 而 PTS 则是用了指示显示时间 。 当使用 FFmpeg 中的 av _ read_frame ( ) 函数读取一个包的时候, 虽然 PTS 和 DTS 保存在 包中, 但是这个 PTS 并不是刚解码出来的原始帧的 PTS, 这个 PTS 不可以用来同步。 然而, 每开始对新的一帧进行解码时, avcodec_decode_video2 ( ) 将调用一个函数来为一帧申请缓存, FFmpeg 允许用户重新定义这个分配内存的函数, 并且, 由此, 可 以在分配内存的函数中保存第一个包 PTS, 以此作为这一帧的 将每一帧的 PTS 与声音时钟 显示时间。得到了视频的 PTS 后, 比较, 如果超前, 则放慢刷新速率;否则, 加快刷新速率。从而使 音视频年 4 月, 谷歌正式发布了 Android NDK, 者使用 C / C + + 作为编程语言来为 Android 开发应用程序。 如 今,Android 应用程序的开发有 3 种编程语言组合可以选择:1 ) Java;2 ) Java + C / C + + ;3 ) C / C + + 。 本文中的软件方案采用 第 2 ) 种组合, 使用 Java + C + + 作为编程语言
第 11 期
马建设等:基于 Android 系统的视频播放器开发
137
频解码、 视频显示、 声音输出、 音视频同步等模块。 视频播放由 两个线程来实现, 左边线程在视频播放 Activity 的 OnCreate( ) 方 法中启动, 进行程序初始化、 音视频解码、 纹理创建、 声音输出、 音视频同步等操作。右边线程是 OpenGL ES 的渲染线程, 专门 负责视频的显示, 显示的内容即为左边线程中创建的纹理


为了解决 Android 系统对视频格式支持较少的问题 , 开发一款采用 FFmpeg 作为音视频解码器的视频播放器 , 该视频播
放器可以播放多种格式的视频 。对该视频播放器的整体方案以及音视频解码 、 视频显示、 音视频同步等模块的实现方法作了具体阐 测试结果表明该视频播放器可以满足用户播放本地视频文件的需求 。 述。该视频播放器在 Tiny210 开发板上进行测试, 关键词 中图分类号 Android TP311 FFmpeg OpenGL ES 2. 0 文献标识码 A 视频播放器 DOI:10. 3969 / j. issn. 1000386x. 2013. 11. 038
, 不足以满足用户的需求 。 因此, 开发支持更多
视频格式、 解码速度更快的视频播放器成为 Android 应用程序 开发的一个热点。本文开发的视频播放器采用 FFmpeg 进行音 视频解码, 可以播放多种格式的本地视频 。
1
Android 应用程序开发
早期的 Android 开发只支持 Java 作为编程语言开发应用程
Abstract
In order to solve the problem that Android system only supports a few video formats, we develop a video player which uses FFm-
peg as its audio and video decoder. It can play back the videos in format of most kinds. In this paper,a detailed description of the overall solution is given,and the implementation methods of some modules are also described,such as audio and video decoding,video display,audio and video synchronisation. The video player is tested on Tiny210 ,a development board. The test results show that the video player can meet users’needs of playing back local video files. Keywords Android FFmpeg OpenGL ES 2. 0 Video player 较关键的几个子模块的实现方法进行了阐述 。 这些子模块包 括:音视频解码、 视频显示、 声音输出、 音视频同步。
[2 ]
图1
整体方案框图
2. 2
视频播放
视频播放模块的原理框图如图 2 所示。视频播放包含音视

2
软件方案
软件方案中对整体方案进行了简要的概述, 并对方案中比
收稿 日 期: 2012 - 07 - 20 。 粤 港 关 键 领 域 重 点 突 破 项 目 ( 20092 05128 ) 。马建设, 副教授, 主研领域:多媒体技术应用。赵雪江, 硕士生。 苏萍, 助理研究员。夏飞鹏, 硕士生。
DEVELOPMENT OF ANDROIDBASED VIDEO PLAYER
Ma Jianshe Zhao Xuejiang Su Ping Xia Feipeng
( Department of Precision Instruments and Mechanology,Graduate School at Shenzhen, Tsinghua University, Shenzhen 518055 , Guangdong,China)
图3
音视频解码流程图
( 2 ) 视频显示 本方案采用 Android 系统的 OpenGL ES 图形库来进行视频 显示。OpenGL 是应用最为广泛的图形库之一, 而 OpenGL ES ( OpenGL for Embedded System) 是由 OpenGL 裁剪而来, 为嵌入 式设备而设计的图形库 。 视频显示采用 OpenGL ES 2. 0 中的纹理贴图技术。首先在 画布上绘制两个直角三角形, 构成一个矩形, 矩形相当于屏幕。
第 30 卷第 11 期 2013 年 11 月
计算机应用与软件 Computer Applications and Software
Vol. 30 No. 11 Nov. 2013
基于 Android 系统的视频播放器开发
马建设 赵雪江 苏 萍 夏飞鹏
( 清华大学深圳研究生院精密仪器与机械学系 广东 深圳 518055 )
视频文件包含视频流和音频流使用ffmpeg进行视频解码首先需要注册所有的解码器avregisterall函数然后打开视频文件avopeninputfile函数读取流信息avfindstreaminfo函数并确定音视频流的索引根据流索引确定音视频流对应的解码器并初始化avcodecfinddecoderavcodecopen函数接下来开始读取数据包avreadframe函数判断是音频包还是视频包如果是音频包则使用前面确定的音频解码器进行解码avcodecdecodeaudio3函数如果是视频包则使用视频解码器进行解码avcodecdecodevideo2函数7
[4 ]
使用 glTexImage2D 载 入 纹 理, 然 后 通 过 fragmentShader 中 的 Sampler 对该纹理进行采样, 以确定屏幕上每一个像素点的颜 色, 相 当 于 将 该 纹 理 贴 到 屏 幕 上, 这 样 就 实 现 了 2D 视 频 的 [8 ] 显示 。 ( 3 ) 声音输出 OpenAL ( Open Audio Library) 是自由软件界的跨平台音效 API, 其风格类似 OpenGL, 使用简单。该方案中的声音输出采用 OpenAL 实现。将 OpenAL 移植到 Android 系统, 按照声音输出 的流程( 图 4 ) 调用相应的 API 实现声音输出。在播放声音的过 程中不断地查询声音播放的状态, 根据查询到的状态确定是否 [9 ] 对 Buffer 中的声音数据进行更新 。
[3 ] 该视频播放器主要由文件浏览( Java ) 和视频播放( C + + ) 两个模块组成。其中文件浏览可以逐个目录浏览文件, 也可
以选择某个文件夹, 扫描其中包含的视频文件 。 视频播放主要 、 实现视频的播放 前进、 后退、 暂停、 继续、 进度拖拽和停止等功 能。整体方案框图如图 1 所示。
( 1 ) 音视频解码 FFmpeg 是一个开源免费跨平台的音视频流方案, 它包含功
[5 ] 能强大的音视频解码库 。 本方案首先将 FFmpeg 移植到 Android 平台[6] , 然后使用 FFmpeg 进行视频的解码。 视频的解码
是一个较复杂的过程, 音视频解码流程图如图 3 。 视频文件包 使用 FFmpeg 进行视频解码, 首先需要注册 含视频流和音频流, 所有的解码器( av_register_all( ) 函数) , 然后打开视频文件( av_ open_input_file( ) 函数) , 读取流信息( av_find_stream_info ( ) 函 数) 并确定音、 视频流的索引, 根据流索引确定音、 视频流对应 avcodec_open ( ) 函 的解码器并初始化( avcodec_find_decoder ( ) 、 数) , 接下来开始读取数据包( av_read_frame ( ) 函数) , 判断是音 频包还是视频包, 如果是音频包则使用前面确定的音频解码器 进行解码( avcodec_decode_audio3 ( ) 函数) , 如果是视频包, 则使 [7 ] 用视频解码器进行解码( avcodec_decode_video2 ( ) 函数) 。
3
真机测试
本文设计的视频播放器在安装有 Android 2. 3 系统的 Tiny210 开发板上进行了测试。通过测试, 能够流畅播放多种常见格式的视 wmv 等), 频文件( avi、 并且播放器的各种功能均可实现, 例如前进、 后退、 暂停、 继续、 进度拖拽等。以一个分辨率为 1 024 × 768, 格式为 avi 的高清视频文件为例, 测试效果如图 5 所示。
相关文档
最新文档