我正在尝试使用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));
}
}
}
答案 0 :(得分:0)
似乎RTSP在6/2011(一年前)不受支持。从关于NDK更新的发行说明。本机Youtube应用程序可能没有使用RSTP进行流式传输(还有其他方式来流式传输视频)。查看this link了解详情。
但是在Webworks方面,是的。 Html5视频标签已完全实现。您可以在此处找到更多信息:https://bdsc.webapps.blackberry.com/html5/apis/HTMLVideoElement.html它将使用内置视频播放器。请注意,这不适用于BB10。
更新:BB10平台现在也支持HTML5视频广告代码。