BlackBerry视频播放编程
来源:互联网 发布:混血失败知乎 编辑:程序博客网 时间:2024/05/21 17:37
BlackBerry 平台支持MMAPI,支持 Player在BlackBerry界面框架上播放视频。视频格式包括mpg, 3gp, avi 等等。以下代码片段分别解释在MIDP和BlackBerryUI两种框架下的视频播放。
对于提供了LCDUI支持的MIDP实现:
public void playVideo() {
try {
// 创建Player,媒体资源为网络上的视频,并获取视频信息
Playerp = Manager.createPlayer("http://abc.mpg");
p.realize();
// 界面控制器
GUIControlgc;
// 获取界面控制器
// 使用Item播放视频
// 把Item添加到Form,再显示Form
// 实现了在Form播放视频
if ((gc =(GUIControl) p.getControl("GUIControl")) != null) {
Formform = new Form("My GUI");
form.append((Item)gc.initDisplayMode(
GUIControl.USE_GUI_PRIMITIVE, null));
Display.getDisplay(this).setCurrent(form);
}
// 开始播放
p.start();
}catch (MediaExceptionpe) {
}catch (IOExceptionioe) {
}
}
在MIDP框架下界面方式有两种,Form和Canvas。Form界面是MIDP框架下的高级UI组件,容器与组件的结构。上述代码是在MIDP高级UI框架中播放视频。Canvas是MIDP框架中的低级界面,程序员需要在Canvas上绘制自己的UI组件。Canvas上播放视频范例如下:
MIDP框架下Canvas组件上播放视频:
public void playVideo(Canvascanvas) {
try {
// 创建Player,媒体资源为网络上的视频,并获取视频信息
Playerp = Manager.createPlayer("http://abc.mpg");
p.realize();
// 视频控制器
VideoControlvidc;
// 获取视频控制器
// 传入Canvas,配置在Canvas里播放视频
// 使用视频控制配置播放参数
if((vidc = (VideoControl)p.getControl("VideoControl")) !=
null){
vidc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,
canvas);
vidc.setDisplayFullScreen(true);
vidc.setVisible(true);
}
// 开始播放
p.start();
}catch (MediaExceptionpe) {
}catch (IOExceptionioe) {
}
}
在使用Canvas播放视频时,需要获取VideoControl,它可以把Canvas作为播放组件,同时提供一些方法调整视频显示位置和尺寸。
以上是MIDP框架下高级UI和低级UI播放视频的方法。在BlackBerry平台上如果应用程序使用的是MIDP框架开发视频播放,可以直接使用这两个范例。BlackBerry平台提供BlackBerry特有的UI框架,框架结构与J2SE比较类似,Container-LayoutManager-Component的结构。BlackBerry最基本的UI组件是Field,视频需要在Field里进行播放,范例如下:
BlackBerry UI框架下播放视频:
public void playVideo(){
try{
// 创建新播放器
InputStreamis = this.getClass().getResourceAsStream(URI);
m_player =javax.microedition.media.Manager.createPlayer(is,
VIDEO_FORMAT);
// 获取视频文件信息,这一步一定要有,否则获取的VideoControl将无效
m_player.realize();
// 获取视频控制
m_videoControl =
(VideoControl)m_player.getControl("VideoControl");
if (m_videoControl != null)
{
// 从视频控制获取UI组件,这个组件用来显示视频,常用组件比如Field
m_videoField = (Field) m_videoControl.initDisplayMode
(VideoControl.USE_GUI_PRIMITIVE,
"net.rim.device.api.ui.Field");
// 设置显示尺寸
m_videoControl.setDisplayFullScreen(true);
// 使视频可见
m_videoControl.setVisible(true);
}
if (m_videoField != null){
// 添加视频组件到屏幕并开始播放
add(m_videoField);
m_player.start();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
创建播放器和播放流程与MIDP框架下的播放器相同,但在获取显示视频组件时有所不同,对于BlackBerry风格的界面要求在Field里显示视频:
Field videoField = (Field)
m_videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE,
"net.rim.device.api.ui.Field");
要注意的是获取VideoControl之前一定要让播放器获取媒体信息,Player.realize(),否则获取的VideoControl无效。
以上是在三种界面框架下的播放方式。针对BlackBerry平台BlackBerry风格界面的视频播放,以下是一个完整的代码例子:
import java.io.InputStream;
import javax.microedition.media.Player;
import javax.microedition.media.control.VideoControl;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;
public class VideoPlayerApp extends UiApplication{
private static VideoPlayerApp m_instance;
private VideoScreen m_videoPlayerScreen;
public static void main(String[] args){
// 应用程序启动入口
getInstance().enterEventDispatcher();
}
public VideoPlayerApp(){
// 创建播放器屏幕
m_videoPlayerScreen = new VideoScreen();
// 推出屏幕堆栈,显示播放器屏幕
pushScreen(m_videoPlayerScreen);
}
// 实现 VideoPlayerApp单类,运行环境中只有一个VideoPlayerApp实例
public static synchronized VideoPlayerApp getInstance(){
if (m_instance == null){
m_instance = new VideoPlayerApp();
}
return m_instance;
}
// 播放器屏幕
class VideoScreen extends MainScreen{
// 指向本地视频的URI
public static final String URI = "/video/song.3GP";;
// 视频格式,video/3gpp支持3gp文件
public static final String VIDEO_FORMAT = "video/3gpp";
// 播放器实例
private Player m_player;
// 视频播放控制
private VideoControl m_videoControl;
private Field m_videoField;
public VideoScreen(){
super(Manager.NO_HORIZONTAL_SCROLL|Manager.NO_VERTICAL_SCROLL);
// 在VideoScreen上播放视频
playVideo();
}
// 创建播放器
private void playVideo(){
try{
// 创建新播放器
InputStream is = this.getClass().getResourceAsStream(URI);
m_player = javax.microedition.media.Manager.createPlayer(is, VIDEO_FORMAT);
// 获取视频文件信息,这一步一定要有,否则获取的VideoControl将无效
m_player.realize();
// 获取视频控制
m_videoControl = (VideoControl)m_player.getControl("VideoControl");
if (m_videoControl != null)
{
// 从视频控制获取UI组件,这个组件用来显示视频,常用组件比如Field
m_videoField = (Field) m_videoControl.initDisplayMode (VideoControl.USE_GUI_PRIMITIVE,
"net.rim.device.api.ui.Field");
// 设置显示尺寸
m_videoControl.setDisplayFullScreen(true);
// 使视频可见
m_videoControl.setVisible(true);
}
if (m_videoField != null){
// 添加视频组件到屏幕并开始播放
add(m_videoField);
m_player.start();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
// 阻止屏幕弹出 save菜单
public boolean onSavePrompt(){
return true;
}
}
}
- BlackBerry视频播放编程
- BlackBerry 多媒体播放编程
- BlackBerry 多媒体播放编程
- BlackBerry 视频录制编程
- Android 多媒体编程 视频播放
- 在BlackBerry上播放音频
- Activity编程之视频播放界面
- Qt5--播放视频的混合编程
- ffmpeg编程基础:视频解码、音频播放
- BlackBerry 拍照编程
- BlackBerry 网络连接编程
- BlackBerry 照相编程
- BlackBerry 触摸屏设备编程
- Blackberry 网络连接编程
- BlackBerry 照相编程
- BlackBerry上的实时视频
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
- ActiveMQ
- VC:CString 用法整理(转载)
- java实现的des3加密解密算法
- 学习STL map, STL set之数据结构基础(转)
- flash 日历
- BlackBerry视频播放编程
- TOMCAT设置JDK
- SQL Server大小写区分方法总结
- ADO.NET 之sqlConnection 对象使用摘要
- AIR是什么?.air文件如何打开?flex如何运行air文件
- ADO.NET之sqlCommand对象
- java mail 通用类
- 命令行下的Python进度条
- Android蓝牙API之BluetoothAdapter类