Ich bin meinem endgültigen gewünschten Ergebnis viel näher, danke.Probleme beim Hinzufügen von Videosteuerelementen zu einem Video, das mit XML ausgewählt wurde. ComboBox
Zwei verbleibende Probleme, wenn ich vorher und nachher drücke, wird der Name in der Combobox manchmal nicht synchron angezeigt.
Auch ich kann nicht scheinen, um den Video-Scrubber zu arbeiten.
hinzufügen index.zip auf den Link oben, um dl-Quelldateien (nicht genug Punkte haben 2 Links posten)
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;
/////// Original-Beitrag////////////////
Hallo, es ist ein paar Jahre her, seit ich Flash berührt habe, vielleicht habe ich nur etwas übersehen. Wenn jemand den Code anschauen und Vorschläge machen könnte, wäre das großartig.
Was funktioniert, wähle ich ein Video aus einer Combobox, die aus einer XML-Datei gefüllt ist, wählen Sie das Video und es spielt.
Ich habe versucht, Pause/Wiedergabe, Stopp, Vorwärts und Rückwärtsfunktion hinzuzufügen, sobald ich das zum Arbeiten bekomme ich auch einen Video-Scrubber (Slider) hinzufügen möchten, und vorherige/nächste Tasten, um zum vorherigen zu gehen/nächstes Video wie in der XML-Datei aufgelistet.
Im Moment habe ich eine Komponente Taste auf der Bühne namens playButton, die ich versuche für Pause/Play-Funktionalität zu verwenden. Unten ist mein Code, die Player-Kontrolle ist ganz unten. Vielen Dank.
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();
}
Ich denke, Ihre Play-Taste funktioniert es sonst ein Toggle sein muss, verwenden, nur das erste Mal, Nein? – redconservatory
Ich habe eine separate Wiedergabe und Pause-Taste, ich denke, es wäre sinnvoll, sie zu konsolidieren, ist es möglich, die Beschriftung mit AS zu ändern, ich rate irgendeine Art if-Anweisung? – Chuck