BlackBerry视频播放编程

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

 

对于提供了 LCDUI支持的 MIDP实现:

 

public void playVideo() {

      try {

 

            // 创建 Player ,媒体资源为网络上的视频,并获取视频信息

            Player p = Manager.createPlayer ( "http://abc.mpg" );

            p.realize();

 

            // 界面控制器

            GUIControl gc;

 

            // 获取界面控制器

            // 使用 Item 播放视频

            // Item 添加到 Form ,再显示 Form

            // 实现了在 Form 播放视频

            if ((gc = (GUIControl) p.getControl( "GUIControl" )) != null ) {

                  Form form = new Form( "My GUI" );

                  form.append((Item) gc.initDisplayMode(

                              GUIControl. USE_GUI_PRIMITIVE , null ));

                  Display.getDisplay ( this ).setCurrent(form);

            }

                 

            // 开始播放

            p.start();

 

      } catch (MediaException pe) {

      } catch (IOException ioe) {

      }

}

MIDP框架下界面方式有两种, Form Canvas Form界面是 MIDP框架下的高级 UI组件,容器与组件的结构。上述代码是在 MIDP高级 UI框架中播放视频。 Canvas MIDP框架中的低级界面,程序员需要在 Canvas上绘制自己的 UI组件。 Canvas上播放视频范例如下:


MIDP框架下 Canvas组件上播放视频 :

 

 

 

public void playVideo(Canvas canvas) {

      try {

 

            // 创建 Player ,媒体资源为网络上的视频,并获取视频信息

            Player p = Manager.createPlayer ( "http://abc.mpg" );

            p.realize();

 

            // 视频控制器

            VideoControl vidc;

 

            // 获取视频控制器

            // 传入 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 (MediaException pe) {

      } catch (IOException ioe) {

      }

}

 

 

在使用 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 {

            // 创建新播放器

            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();

      }

}

 

创建播放器和播放流程与 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;
        }
    }
}

 


 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值