Видеопоток в Playbook - PullRequest
       32

Видеопоток в Playbook

1 голос
/ 03 февраля 2012

Я пытаюсь воспроизвести видео через RTSP с помощью Adobe Air, у меня есть разрешения:

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

, но когда я играю (), он ничего не делает.

Возможноделать RTSP Streaming на Playbook?Если нет, то возможен ли другой вид видеопотоков?WebWorks?html5 video tag?

Предустановленное приложение Youtube для потокового видео.

Заранее спасибо

здесь пример кода

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 голосов
/ 04 июня 2012

Похоже, что RTSP не был поддержан в 6/2011 (год назад). Из заметок о выпуске обновлений NDK. Родное приложение Youtube может не использовать RSTP для потоковой передачи (есть другие способы для потоковой передачи видео). Проверьте эту ссылку для получения дополнительной информации.

Но на стороне Webworks, да. Видео тег HTML5 полностью реализован. Вы можете узнать больше информации здесь: https://bdsc.webapps.blackberry.com/html5/apis/HTMLVideoElement.html он будет использовать встроенный видеоплеер. Просто отметьте, что это не будет работать на BB10.

Обновление : тег HTML5 видео теперь также поддерживается на платформе BB10.

...