Я намного ближе к своему окончательному желаемому результату, спасибо.
Два оставшихся вопроса, когда я нажимаю на предыдущий и следующий, имя, показанное в выпадающем списке, иногда не синхронизируется.
Также я не могу заставить работать видео скруббер.
Посмотреть это в действии
добавить index.zip к ссылке выше на исходные файлы dl(не хватает очков, чтобы опубликовать 2 ссылки)
import fl.data.DataProvider;
import flash.net.NetStream;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
var videosXML:XML = new XML();
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xml/videos.xml");
var videos:Array = new Array({label:"Select a Video",data:""});
var client:Object = new Object();
var _currentVideoId:int = 0;
var _isPlaying:Boolean = false;
var stream:NetStream;
var videoURL:String;
var connection:NetConnection;
var videoInterval = setInterval(videoStatus,100);
var amountLoaded:Number;
var meta:Object = new Object();
var duration:Number;
// load the XML
loader.addEventListener(Event.COMPLETE,loaderOnComplete);
loader.load(request);
function loaderOnComplete(event:Event):void
{
videosXML = new XML(event.target.data);
for each (var video:XML in videosXML.video)
{
videos.push({label:video.name.toString(),data:video.url.toString()});
}
moviesCB.dataProvider = new DataProvider(videos);
// load the first video
initialize_video_player();
}
function initialize_video_player():void
{
// loads first video in list
videoURL = videosXML.video[0].url;
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.connect(null);
moviesCB.selectedIndex = _currentVideoId++;
}
function playerControls():void
{
pauseBtn.addEventListener(MouseEvent.CLICK, PauseVideo, false, 0, true);
playBtn.addEventListener(MouseEvent.CLICK, PlayVideo, false, 0, true);
nextBtn.addEventListener(MouseEvent.CLICK, NextVideo);
previousBtn.addEventListener(MouseEvent.CLICK, PreviousVideo);
}
function PauseVideo($e:MouseEvent):void
{
stream.togglePause();
}
function PlayVideo($e:MouseEvent):void
{
stream.resume();
}
function netStatusHandler(event:NetStatusEvent):void
{
switch (event.info.code)
{
case "NetConnection.Connect.Success" :
connectStream();
break;
case "NetStream.Play.StreamNotFound" :
trace("Unable to locate video: " + videoURL);
break;
}
}
function connectStream():void
{
stream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
theVideo.attachNetStream(stream);
playerControls();
}
function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// ignore AsyncErrorEvent events.
}
moviesCB.addEventListener(Event.CHANGE, changeHandler);
function changeHandler(event:Event):void
{
if (ComboBox(event.target).selectedItem.data != "")
{
stream.play(ComboBox(event.target).selectedItem.data);
_currentVideoId=moviesCB.selectedIndex;
}
}
function NextVideo(e:MouseEvent):void
{
if (_currentVideoId<videosXML.video.length()-1)
{
_currentVideoId++;
loadNewVideo();
}
else
{
// do nothing, already at maximum videoId
}
}
function PreviousVideo(e:MouseEvent):void
{
trace ("previous video with current video of "+_currentVideoId);
if (_currentVideoId>0)
{
_currentVideoId--;
loadNewVideo();
}
else
{
// do nothing, already at 0
}
}
function loadNewVideo():void
{
// because it's not a mouse action, tell the stream what to play
stream.play(videosXML.video[_currentVideoId].url.toString());
// and update the selectedIndex of the ComboBox
moviesCB.selectedIndex=_currentVideoId;
}
function videoStatus()
{
amountLoaded = ns.bytesLoaded / ns.bytesTotal;
videoLoader.loadBar._width = amountLoaded * 640;
}
meta.onMetaData = function(meta:Object)
{
trace(meta.duration);
}
ns.client = meta;
/////// Оригинальный пост //////////////
Здравствуйте, прошло уже несколько лет с тех пор, как я коснулся вспышки, так что, возможно, я просто что-то упускаю.Если кто-нибудь сможет взглянуть на код и предложить какие-либо предложения, которые будут потрясающими.
Что работает, я выбираю видео из выпадающего списка, который заполняется из файла XML, выбираю видео и оно воспроизводится.
Я пытался добавить функции паузы / воспроизведения, остановки, перемотки вперед и назад, как только я включу это, я также хочу добавить скруббер видео (слайдер) и кнопки «предыдущий / следующий», чтобы перейти к предыдущему /следующее видео, как указано в xml-файле.
На данный момент у меня есть кнопка компонента на сцене, называемая playButton, которую я пытаюсь использовать для паузы / воспроизведения.Ниже мой код, контроль игрока находится в самом низу.Спасибо.
import fl.data.DataProvider;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
var videosXML:XML = new XML();
var loader:URLLoader = new URLLoader();
var request:URLRequest= new URLRequest("xml/videos.xml");
var videos:Array = new Array({label:"Select a Video",data:""});
var client:Object = new Object();
theVideo.attachNetStream(ns);
ns.client = client;
loader.addEventListener(Event.COMPLETE,loaderOnComplete);
loader.load (request);
function loaderOnComplete(event:Event):void{
videosXML = new XML(event.target.data);
for each (var video:XML in videosXML.video){
videos.push({label:video.name.toString(),data:video.url.toString()});
}
moviesCB.dataProvider = new DataProvider(videos);
}
moviesCB.addEventListener(Event.CHANGE, changeHandler);
function changeHandler(event:Event):void {
if(ComboBox(event.target).selectedItem.data != ""){
ns.play(ComboBox(event.target).selectedItem.data);
}
};
client.onMetaData = metadataHandler;
function metadataHandler(md:Object):void{
}
//player controls
playButton.onRelease = function() {
ns.pause();
}