作者:Mark Liu

下载样本代码

简介

在 Android 中,创建一个能够播放视频剪辑的应用非常简单;创建一个采用 3D 图形平面的游戏应用也非常简单。但是,创建一个能够在 3D 图形对象上播放视频的应用却不容易。本文介绍了我为应对该挑战创建的应用。该应用可在 3D 平面上渲染视频,并支持用户以交互的方式在视频平面上播放。

该应用需要解决三大实施问题:

  1. 如何构建代码以支持用户在播放视频时变更 3D 平面?
  2. 虽然 Android 中默认的 MediaPlayer 配备了全面的播放操作,但是难以获得视频图像数据并以定制的方式对其进行渲染。
  3. 如何设计图形组件以执行视频数据渲染?

此外,该应用还面临设备功能的挑战,因为它需要视频和图形对象同时运行。本文将对该款应用的特性和使用进行介绍,然后对其设计进行简要的介绍。

特性

该应用具备以下特性:

  1. 它支持用户从其本地媒体库中选择视频剪辑。
  2. 该应用支持横向和纵向两种方向;当方向转换时,视频能够持续播放。
  3. 它可提供三种播放模式:
    1. 默认模式:这是常规播放模式;视频剪辑如同在常规媒体播放器中一样播放。
    2. 随机旋转:视频的平面可随横向和纵向随机旋转;其颜色也可在红色色调和正常颜色之间切换。
    3. 触摸旋转:用户可以使用触摸功能向左、右滑动并旋转平面,具体取决于速度。
    4. 当将应用移动至后台或关闭时,可将当前的视频剪辑保存并在应用重新激活时进行播放。

注:应用中没有视频会话控制;因此用户无法停止、快进或回放视频。如果将应用移动至后台或关闭,视频只能从头开始播放。

使用模式

开始播放视频剪辑

该应用未包含任何视频,因此用户可以选择 Android 平台支持的任意视频剪辑进行播放。但是,建议使用采用 H.264AVC 编解码器以 MPEG-4 标准处理的视频编辑,因为我们在开发时是采用这种格式。应用首次启动时,将会显示文件选择器界面(请见上一页的截图)。

用户选择首选的文件选择器后,系统将会提供屏幕指示。选择视频剪辑后,将开始播放。
注:有时,视频开始前需要等待一段时间 — 约 5 ~ 10 秒。

选择不同的模式

应用开始播放时是使用常规模式。如要更改模式,用户可点击 UI 上的选项按钮,启动选项菜单。

选项菜单有四个选项:前三个是播放模式选项;最后一个选项可支持用户选择不同的视频剪辑。

随机旋转

该选择可支持渲染视频的平面随着横、纵轴呈 3D 效果随机旋转。此外,它还可定期在屏幕上呈现红色色调。

触摸旋转

在触摸旋转模式中,用户可以向左、右滑动,从而让平面沿着纵轴左、右旋转。当滑动更快时,旋转将会加快;当用户停止滑动时,旋转将会随之减速。

设计

该应用中的三个主要组件包括:为用户提供交互式应用演示的 UI 组件;进行视频播放的视频组件;渲染视频帧缓冲区并在特殊模式下创建 3D 效果的OpenGL* 平面。

该视频播放组件有两个线程。视频引擎线程使用MediaCodec 类。该类在 Android JellyBean 版本(API 16)中推出。它可以提供低级别的 Android 媒体框架 API,因此您可以在帧层面控制播放。在每个视频帧上,图形组件可以控制图像数据,并更改渲染图像的方式。

此外,播放组件还可执行播放视频剪辑音轨的音频引擎线程。为使视频和音频线程同步,从而让人物的口型与其说出的声音相匹配,我们实施了 AV 同步算法。视频播放可使其时间戳与音频时间戳时刻保持一致。它可以对播放速度进行微调,以便将视频帧控制在 30 毫秒的时间范围内。

图形组件可添加一个 GLSurfaceView,从而在该类中嵌入一个定制的渲染类。渲染类可实施渲染器接口来执行 OpenGL 渲染算法。该算法可在纹理平面上实施 3D 旋转效果,还可根据用户的输入将模式更改为其他算法。

在渲染器中,对视频帧旋转和着色是通过一个简单的顶点和像素着色器来控制的。视频平面的旋转通过应用一系列的欧拉角旋转来实现。帧的着色通过将视频帧内容与固定颜色(在本案例中为红色)在像素着色器中进行线性混合来实现。

此外,图形组件还可用作视频引擎的视频帧监听器,并可在实施过程中传送至 MediaCodec 对象,这样每当有可用帧时便可调用渲染功能。图形组件可在 UI 组件中提供一个选项,这样用户便能够更改播放模式。

MediaCodec 编解码流程与视频帧保持同步,图形组件中的渲染器功能与图形帧保持同步。因此,当访问帧缓冲区时,两个组件中的功能必须保持同步。

相关链接与资源:

  • 将 OpenGL* 游戏移植到基于英特尔凌动处理器的 Android* 系统
  • 英特尔架构上的 Android* MediaPlayer 样本代码走查
  • 英特尔处理器显卡上的 3D 游戏
  • 英特尔 Android* 开发人员专区

如要了解更多为 Android 开发人员提供的英特尔工具,请访问:。

作者简介

Mark Liu 是英特尔超便携设备事业部 (Intel Ultra-Mobile Group) 的软件工程师,负责开发基于 Android 设备的验证框架。此外,他还参与英特尔超便携设备事业部的多个其他 Android 项目,包括智能手机和平板电脑设备。他所做的大部分工作都与媒体播放、视频会议和软件栈性能调优相关。

加入英特尔软件和设备事业部基于英特尔® 凌动™ 处理器的设备软件支持团队后,他负责多项不同的任务,包括 Android 样本媒体应用的开发、Windows* 8 媒体框架的系统优化以及用于编写媒体应用的文档。

Chris Kirkpatrick 是英特尔软件与服务事业部的软件工程师,负责为视觉与交互式计算工程设计团队提供英特尔图形解决方案开发支持。他拥有俄勒冈州立大学计算机科学理学士学位。

分类:

  • 安卓*
  • 开发人员
  • 安卓*
video3d.zip (115.71 KB)Download Now

基于 Android 的 3D 视频样本代码相关推荐

  1. android+3d引擎,基于Android系统3D引擎的设计与实现

    摘要: 随着人们生活水平的提高与科学技术的高速发展,在嵌入式设备上开发3D应用程序将会成为亮点,把3D技术应用到Android产品中,会极大的提高产品的竞争力.而3D图形开发的过程中所涉及的知识相当广 ...

  2. android开发 h264传输,基于android的H264视频无线传输系统的设计与实现

    摘 要:随着智能手机在人们生活中的广泛应用,一些过去人们不敢想的梦想变成现实.科技的发展无疑是"中国梦"的重要动力,而智能手机在科技发展中无疑也扮演着重要的角色.在过去短短的几年里 ...

  3. 基于android的门禁系统代码,基于ESP8266 base on esp8266门禁系统 安卓源码

    基于ESP8266门禁系统安卓源码 视频中的小伙伴是我的搭档,负责硬件电路搭建,为了搭电路没少熬夜,挺感谢他的. 这是本人的毕业设计(专科)历时一个月完成.在做毕业设计之前一直在准备转本考试,考完试, ...

  4. 基于android的远程视频监控系统

    http://www.cnblogs.com/feifei1010/archive/2012/08/31/2664939.html 基本过程是android作为socket客户端将采集到的每一帧图像数 ...

  5. 基于android的远程视频监控系统(已开放源码)

    基本过程是android作为socket客户端将采集到的每一帧图像数据发送出去,PC作为服务器接收并显示每一帧图像实现远程监控.图片如下(后来PC端加了个拍照功能)... (PS.刚学android和 ...

  6. java 远程视频监控系统_基于android的远程视频监控系统 附完整源码

    [实例简介]原理:客户端将采集到的每一帧图像数据发送至服务器,服务器接收 [实例截图] [核心代码] /* * @version 1.2 2012-06-29 * @author wanghai */ ...

  7. 【转载】基于android的远程视频监控系统(已开放源码)_只有链接

    http://www.cnblogs.com/feifei1010/archive/2012/08/31/2664939.html

  8. 基于Android的迷你桌球游戏设计与实现

    目录 摘要11 关键词11 绪论11 1 游戏开发概述22 1.1 背景22 1.2 课题来源33 1.3 国内外研究现状33 1.4 Android应用程序构成44 1.4.1 应用程序55 1.4 ...

  9. 基于HTML的3D立方体相册下载

    基于HTML的3D立方体相册 代码下载地址:https://download.csdn.net/download/qq_44273429/13996508 HTML代码: <!DOCTYPE h ...

最新文章

  1. 教你用Python爬虫自制有道翻译词典
  2. 拼多多算法笔试2020
  3. SAP License:今天你‘牺牲’了吗?
  4. 洛谷 P1890 gcd区间
  5. 资深架构师手写教你使用Docker安装RabbitMQ(SpringCloud)
  6. CentOS7安装MySQL及常用指令
  7. 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Robert算子图像边缘检测【含Matlab源码 203期】
  8. CSS预处理器和后处理器
  9. arcgis伪节点检查_ArcGis拓扑错误检查及修改
  10. mtk平台sensor分析一:alsps框架下的光距感驱动流程
  11. 关于iPhone尺寸与分辨率
  12. 【工具DIY】DIY一个高精度电阻箱
  13. 基于C++的AGV机器人无线控制实现
  14. 计算机网络技术店面取名,适合电脑店的名字大全 霸气的电脑店铺起名
  15. 哪些习惯能让生活变得简洁高效?
  16. SQL16 查找GPA最高值
  17. 微软Surface RT平板电脑上手体验报告
  18. 为什么TCP套接字用四元组标识而UDP是二元组?
  19. 【Java】垃圾回收
  20. 摇杆芯片速度测试软件,摇杆控制小车+L9110芯片

热门文章

  1. VMware安装虚拟机(小白看了都会哦)
  2. AI 界的顶级盛会!!!
  3. zwacs短信报警智能工业云监控系统
  4. 在bilibili平台利用第三方推流完成摄像头(手机)、电脑屏幕、背景共存直播。以线上自习室为例
  5. 计算机桌面亮度,如何调暗计算机屏幕的亮度
  6. linux服务器的杀毒软件,linux系统服务器用什么杀毒软件比较好
  7. ssm+jsp计算机毕业设计NN皮草销售网店的设计与实现8pq8z(程序+LW+源码+远程部署)
  8. 饥荒暴食模式服务器无响应,饥荒暴食模式无银盘图文攻略介绍
  9. 苹果手机如何打开开发者模式
  10. macos windowserver占用内存_iMac 5K 硬件升级:加内存、外接 SSD