BlackBerry视频播放编程

来源:互联网 发布:混血失败知乎 编辑:程序博客网 时间:2024/05/21 17:37

BlackBerry 平台支持MMAPI,支持 PlayerBlackBerry界面框架上播放视频。视频格式包括mpg,  3gp, avi 等等。以下代码片段分别解释在MIDPBlackBerryUI两种框架下的视频播放。

 

对于提供了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框架下界面方式有两种,FormCanvasForm界面是MIDP框架下的高级UI组件,容器与组件的结构。上述代码是在MIDP高级UI框架中播放视频。CanvasMIDP框架中的低级界面,程序员需要在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;
        }
    }
}

 


 


 

 

原创粉丝点击