Playbook上的视频流

时间:2012-02-03 12:31:19

标签: air video-streaming html5-video blackberry-playbook playbook

我正在尝试使用Adobe Air通过RTSP播放视频,我有权限:

<action>access_internet</action>
<action>set_audio_volume</action>
<action>access_shared</action>
<action>play_audio</action>

但是当我玩()时,它什么也没做。

可以在Playbook上进行RTSP流媒体播放吗?如果没有,它可能是任何其他类型的视频流? WebWorks的? html5视频标签?

预装的原生Youtube App可以播放视频。

提前致谢

这里是示例代码

package{
import flash.display.Sprite;
import flash.filesystem.File;
import flash.events.Event;

import qnx.events.MediaPlayerEvent;
import qnx.media.MediaPlayer;
import qnx.media.VideoDisplay;
import qnx.ui.events.MediaControlEvent;
import qnx.ui.media.*;
import qnx.dialog.AlertDialog;
import qnx.dialog.DialogSize;



/**
 * ...
 * @author Fernando Franco Giraldez
 */

// The following metadata specifies the size and properties of the canvas that
// this application should occupy on the BlackBerry PlayBook screen.
[SWF(width="1024", height="600", backgroundColor="#cccccc", frameRate="30")]

public class Main extends Sprite 
{

    private var _myPlayer:MediaPlayer;
    private var _myVD:VideoDisplay;
    private var _myMediaControl:MediaControl;
    private var alert:AlertDialog;

    public function Main()
    {
        try {
        initializeUI();
        initializePlayer();  
        }catch (ex:Error) {
            showAlertDialog("Initialize error", ex.name + " - " + ex.message + "\n"+ex.getStackTrace());
        }
    }

    private function initializePlayer():void
    {

        _myVD = new VideoDisplay;
        _myVD.setPosition(1024/2 - 800/2, 600/2 - 480/2);
        _myVD.setSize(800, 480);
        _myVD.backgroundColor = 0xFFFFFF;
        addChild(_myVD);

        _myPlayer = new MediaPlayer();
        _myPlayer.addEventListener(MediaPlayerEvent.INFO_CHANGE, infoChange);        

        var file:File = File.userDirectory.resolvePath("shared/videos/Wildlife.wmv");
                    //_myPlayer.url = file.nativePath;   //using this i can see the video  
        _myPlayer.url = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; 
        //_myPlayer.url = "rtsp://stream.the.sk/live/joj/joj-hm.3gp"
                    // but using any of internet urls i can`t see anything
        _myPlayer.videoDisplay = _myVD;
        _myPlayer.prepare();
        showAlertDialog("Preparando video", "acabo de meteer: " + _myPlayer.url);

    }

    private function initializeUI():void
    {

        _myMediaControl = new MediaControl();
        _myMediaControl.width = 900;
        _myMediaControl.x = Math.round((stage.stageWidth - _myMediaControl.width) / 2);
        _myMediaControl.y = stage.stageHeight - _myMediaControl.height;

        _myMediaControl.setOption( MediaControlOption.VOLUME, true );
        _myMediaControl.setOption( MediaControlOption.PLAY_PAUSE, true );
        _myMediaControl.setOption( MediaControlOption.NEXT, true );
        _myMediaControl.setOption( MediaControlOption.PREVIOUS, true );
        _myMediaControl.setOption( MediaControlOption.STOP, true );
        _myMediaControl.setOption( MediaControlOption.SEEKBAR, true );
        _myMediaControl.setOption( MediaControlOption.DURATION, true );
        _myMediaControl.setOption( MediaControlOption.POSITION, true );
        _myMediaControl.setOption( MediaControlOption.BACKGROUND, true);
        _myMediaControl.setProperty( MediaControlProperty.VOLUME, 80 );

        _myMediaControl.addEventListener( MediaControlEvent.STATE_CHANGE, mediaControlStateChange );
        _myMediaControl.addEventListener( MediaControlEvent.PROPERTY_CHANGE, mediaControlPropChange );

        addChild(_myMediaControl);            

    }

    private function infoChange(event:MediaPlayerEvent):void {

        if (event.what.position) {
            _myMediaControl.setProperty(MediaControlProperty.POSITION, _myPlayer.position);
        }
        if (event.what.duration) {
            _myMediaControl.setProperty(MediaControlProperty.DURATION, _myPlayer.duration);
        }
        if (event.what.state) {
            _myMediaControl.setState(_myPlayer.isPlaying ? MediaControlState.PLAY : MediaControlState.PAUSE);
        }        


    }

    private function mediaControlStateChange(mediaControlEvent:MediaControlEvent):void
    {
        var state:String = _myMediaControl.getState();

        switch( state )
        {
            case MediaControlState.PLAY:
                if (!_myPlayer.isPlaying) 
                {
                    try {                           
                        _myPlayer.play();
                        showAlertDialog("Play", "play detectado");
                    }catch (ex:Error) {
                        showAlertDialog("play() error", ex.name + " - " + ex.message + "\n"+ex.getStackTrace());
                    }
                } 
                else 
                {
                    _myPlayer.speed = 1000;
                }
                break;
            case MediaControlState.PAUSE:
                _myPlayer.pause();
                break;
            case MediaControlState.STOP:
                _myPlayer.stop();
                break;
            case MediaControlState.SEEK_START:
                _myPlayer.pause();
                break;
            case MediaControlState.SEEK_END:
                _myPlayer.play();
                break;
            default:
                break;
        }
    }

    private function mediaControlPropChange(event:MediaControlEvent):void {

        switch (event.property) {

            case MediaControlProperty.POSITION:
            {
                _myPlayer.seek(uint( _myMediaControl.getProperty(MediaControlProperty.POSITION)));
            }
                break;
            case MediaControlProperty.DURATION:
                break;
            case MediaControlProperty.FULLSCREEN:
                break;
            case MediaControlProperty.VOLUME:
                break;
            default:
                break;
        }
    }

    private function showAlertDialog(title:String,message:String):void
    {
        alert = new AlertDialog();
        alert.title = title;
        alert.message = message;
        alert.addButton("OK");
        alert.addButton("CANCEL");
        alert.dialogSize= DialogSize.SIZE_MEDIUM;
        alert.addEventListener(Event.SELECT, alertButtonClicked); 
        alert.show();
    }

    private function alertButtonClicked(event:Event):void
    {
        trace("Button Clicked Index: " + event.target.selectedIndex);
        trace("Button properties Object"+event.target.getItemAt(event.target.selectedIndex));
    }

}

}

1 个答案:

答案 0 :(得分:0)

似乎RTSP在6/2011(一年前)不受支持。从关于NDK更新的发行说明。本机Youtube应用程序可能没有使用RSTP进行流式传输(还有其他方式来流式传输视频)。查看this link了解详情。

但是在Webworks方面,是的。 Html5视频标签已完全实现。您可以在此处找到更多信息:https://bdsc.webapps.blackberry.com/html5/apis/HTMLVideoElement.html它将使用内置视频播放器。请注意,这不适用于BB10。

更新:BB10平台现在也支持HTML5视频广告代码。