作者:海滨2502940147 | 来源:互联网 | 2023-05-18 04:35
I'm trying to get StageVideo to work in my app but I'm having problems. I need to play a series of videos one after the other, the first video always plays fine but the others will only play the audio, and the StageVideo will show the last frame from the first video.
我想让StageVideo在我的应用中运行,但我遇到了问题。我需要一个接一个地播放一系列视频,第一个视频总是播放得很好,但是其他的只播放音频,而StageVideo会播放第一个视频的最后一帧。
It's as if the StageVideo has frozen and is playing the video but I can't see it (only hear it). I've posted my complete code here:
这就像《斯塔维迪欧》(StageVideo)已经停播,正在播放视频,但我看不见(只能听到)。我在这里发布了完整的代码:
I'm testing on iPad2 with Adobe Air 3.2 beta, but have also tested with 3.1 and same results.
我正在用adobeair 3.2 beta测试iPad2,但也测试了3.1和相同的结果。
Here is my video class:
这是我的视频课程:
package {
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.Event;
import flash.media.StageVideo;
import flash.events.StageVideoEvent;
import flash.events.StageVideoAvailabilityEvent;
import flash.media.StageVideoAvailability;
import flash.net.NetStream;
import flash.net.NetConnection;
import flash.geom.Rectangle;
import flash.events.NetStatusEvent;
public class SVideo2 extends MovieClip {
public static const VIDEO_FINISHED:String = 'videoFinished';
private var debugPanel:TextField;
private var addedToStage:Boolean = false;
private var videoFile:String;
private var hwaEnabled:Boolean = false;
private var video:StageVideo;
private var ns:NetStream;
private var nc:NetConnection;
public function SVideo2() {
addDebugPanel();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event) :void{
output('ADDED TO STAGE');
addedToStage = true;
stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onAvail);
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function playVideo(videoFile:String) :void{
output('playVideo: '+videoFile);
if(addedToStage){
this.videoFile = videoFile;
if(hwaEnabled){
startPlaying();
}
else{
output('HWA NOT AVAILABLE');
}
}
else{
output('NOT ON STAGE');
}
}
private function onAvail(e:StageVideoAvailabilityEvent) :void{
output(e.availability);
if(e.availability == StageVideoAvailability.AVAILABLE){
output('VIDEO AVAILABLE');
hwaEnabled = true;
}
}
private function startPlaying() :void{
output('STARTING TO PLAY');
video = stage.stageVideos[0];
video.addEventListener(StageVideoEvent.RENDER_STATE, onRender);
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
ns.client = this;
video.attachNetStream(ns);
ns.play(videoFile);
}
private function onRender(e:StageVideoEvent) :void{
output('onRender');
video.viewPort = new Rectangle(192, 50, 640, 480);
}
private function onNetStatus(e:NetStatusEvent) :void{
output(e.info.code);
if(e.info.code == 'Netstream.Play.Stop'){
output('VIDEO STOPPED');
dispatchEvent(new Event(VIDEO_FINISHED));
}
}
private function addDebugPanel() :void{
var tFormat:TextFormat = new TextFormat('Arial', 14, 0x000000, true);
var tField:TextField = new TextField();
tField.setTextFormat(tFormat);
tField.multiline = true;
tField.border = true;
tField.borderColor = 0x000000;
tField.background = true;
tField.backgroundColor = 0xFFFFFF;
tField.x = 0;
tField.y = 568;
tField.width = 1024;
tField.height = 200;
this.debugPanel = tField;
addChild(debugPanel);
}
private function output(what:String) :void{
debugPanel.appendText("\n"+what);
}
public function onXMPData(info:Object) :void{}
public function onMetaData(info:Object) :void{}
public function onCuePoint(info:Object) :void{}
public function onPlayStatus(info:Object) :void{}
}
}
And here's the code I'm using in frame:
这是我在frame中的代码:
import flash.display.Sprite;
import flash.events.MouseEvent;
var vid:SVideo2 = new SVideo2();
addChild(vid);
var btn:Sprite = new Sprite();
btn.graphics.beginFill(0x333333);
btn.graphics.drawRect(0, 0, 100, 40);
btn.x = 462;
btn.y = 518;
btn.width = 100;
btn.height = 40;
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent) :void{
var rand:String = String(Math.floor(Math.random() * 37));
vid.playVideo('mp4/result_'+rand+'.mp4');
}
2 个解决方案