基于 Android 的 3D 视频示例代码
笔者:Mark
Liu
简单介绍
在Android 中,创建一个可以播放视频剪辑的应用很easy;创建一个採用
3D 图形平面的游戏应用也很easy。可是,创建一个可以在 3D 图形对象上播放视频的应用却不easy。
本文介绍了我为应对该挑战创建的应用。
该应用可在 3D 平面上渲染视频,并支持用户以交互的方式在视频平面上播放。
该应用须要解决三大实施问题:
- 怎样构建代码以支持用户在播放视频时变更 3D 平面?
- 尽管 Android 中默认的 MediaPlayer 配备了全面的播放操作,可是难以获得视频图像数据并以定制的方式对其进行渲染。
- 怎样设计图形组件以运行视频数据渲染?
此外,该应用还面临设备功能的挑战,由于它须要视频和图形对象同一时候执行。本文将对该款应用的特性和使用进行介绍。然后对其设计进行简要的介绍。
特性
该应用具备下面特性:
- 它支持用户从其本地媒体库中选择视频剪辑。
- 该应用支持横向和纵向两种方向;当方向转换时,视频可以持续播放。
- 它可提供三种播放模式:
- 默认模式:这是常规播放模式。视频剪辑如同在常规媒体播放器中一样播放。
- 随机旋转:视频的平面可随横向和纵向随机旋转;其颜色也可在红色色调和正常颜色之间切换。
- 触摸旋转:用户能够使用触摸功能向左、右滑动并旋转平面,详细取决于速度。
- 当将应用移动至后台或关闭时,可将当前的视频剪辑保存并在应用又一次激活时进行播放。
注:应用中没有视频会话控制;因此用户无法停止、快进或回放视频。假设将应用移动至后台或关闭,视频仅仅能从头開始播放。
使用模式
開始播放视频剪辑
该应用未包括不论什么视频。因此用户能够选择 Android 平台支持的随意视频剪辑进行播放。可是。建议使用採用 H.264AVC 编解码器以 MPEG-4 标准处理的视频编辑。由于我们在开发时是採用这样的格式。应用首次启动时。将会显示文件选择器界面(请见上一页的截图)。
用户选择首选的文件选择器后。系统将会提供屏幕指示。
选择视频剪辑后。将開始播放。
注:有时,视频開始前须要等待一段时间 — 约 5 ~ 10 秒。
选择不同的模式
应用開始播放时是使用常规模式。如要更改模式,用户可点击 UI 上的选项button,启动选项菜单。
选项菜单有四个选项:前三个是播放模式选项。最后一个选项可支持用户选择不同的视频剪辑。


随机旋转
该选择可支持渲染视频的平面随着横、纵轴呈 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) 的软件project师,负责开发基于 Android 设备的验证框架。此外。他还參与英特尔超便携设备事业部的多个其它 Android 项目。包含智能手机和平板电脑设备。
他所做的大部分工作都与媒体播放、视频会议和软件栈性能调优相关。
增加英特尔软件和设备事业部基于英特尔® 凌动™ 处理器的设备软件支持团队后,他负责多项不同的任务,包含 Android 样本媒体应用的开发、Windows* 8 媒体框架的系统优化以及用于编写媒体应用的文档。
Chris Kirkpatrick 是英特尔软件与服务事业部的软件project师,负责为视觉与交互式计算project设计团队提供英特尔图形解决方式开发支持。他拥有俄勒冈州立大学计算机科学理学士学位。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
基于 Android 的 3D 视频示例代码的更多相关文章
- 基于 Android 的 3D 视频样本代码
作者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
- 工控图表控件ProEssentials创建3D柱状图示例代码
使用ProEssentials可以创建3D柱状图,柱状图的形式包括线框.实体和阴影. 类似于Graph control,3D柱状图只需要YData. Subsets定义沿z轴有多少行,Points定义 ...
- 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token
1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...
- Android视录视频示例
这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整.下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下. Activity类:VideoActivity pa ...
- 基于Android的远程视频监控系统(含源码)
基本过程是android作为socket客户端将采集到的每一帧图像数据发送出去,PC作为服务器接收并显示每一帧图像实现远程监控.图片如下(后来PC端加了个拍照功能)... (PS.刚学android和 ...
- AspNetCore 基于流下载文件与示例代码
昨天说了,AspNetCore如何进行上传文件,其中写了两种方式ajax与模型,其文章地址为:https://www.cnblogs.com/ZaraNet/p/9949167.html 那么既然有上 ...
- 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)
☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...
- EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码
背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...
- 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用
疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了"生活新常态". 本文将教你如何通过即构ZEGO sdk在Android端搭建 ...
随机推荐
- dumpbin
在使用VC时,可以用DUMPBIN.EXE来得到某个DLL中所输出的符号的清单.如下面的 命令:dumpbin -exports Cmpnt1.dll如: C:/WINDOWS/system32> ...
- 与众不同 windows phone (25) - Input(输入)之捕获 UIElement 之外的触控操作, Silverlight 方式捕获手势操作, XNA 方式捕获手势操作, 多点触控
原文:与众不同 windows phone (25) - Input(输入)之捕获 UIElement 之外的触控操作, Silverlight 方式捕获手势操作, XNA 方式捕获手势操作, 多点触 ...
- 专注UI——有用技术:模糊搜索
在如今的项目中.须要做模糊搜索,在曾经技术的基础上非常快得完毕了第一版.大家先看看第一版的效果,我们一会做评论: 0基础: 我们可能部分源代码(附件中会有所有源代码) <span style=& ...
- 无向图的最短路径算法JAVA实现(转)
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
- Deep Learning(深度学习) 学习笔记(四)
神经概率语言模型,内容分为三块:问题,模型与准则,实验结果.[此节内容未完待续...] 1,语言模型问题 语言模型问题就是给定一个语言词典包括v个单词,对一个字串做出二元推断,推断其是否符合该语言表达 ...
- Cocos2dx 3.x创建Layer的步骤
创建 1.新建类文件.注意文件夹为Classes下.否则文件不能正常找到. 2.改动预编译头.如用VS,默觉得#pragma once,为了兼容,改为#ifndef | #define | #endi ...
- 恶补jquery(四)jquery中事件--冒泡
事件 当我们在打开一个页面的时候.浏览器会对页面进行解释运行,这实际上是通过运行事件来驱动的.在页面载入事件时,运行Load()事件,是这个事件实现浏览器解释运行代码的过程. 事件机制 事件中的冒泡现 ...
- jQuery 弹出窗口的形式一直是具体案件的中心
在网上查 多 不是不符合无效;因此,一些自己总结,解决这个问题 原则: 常见问题: 弹出层居中了,背景也是半透明的 可是发现一拉动滚动栏立即就露馅了发现背景仅仅设置了屏幕所在段,其它部分都是原来 ...
- poj 1659 Frogs' Neighborhood (度序列)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 7295 Accepted: 31 ...
- PostgreSQL服务端监听设置及client连接方法
背景介绍: PostgreSQL服务端执行在RedHat Linux上,IP为:192.168.230.128 client安装在Windows XP上, IP为:192.168.230.1 配置方法 ...