gpt4 book ai didi

ios - 适用于iOS的AS3 AIR-StageVideo无法正常工作

转载 作者:行者123 更新时间:2023-12-01 18:30:21 24 4
gpt4 key购买 nike

我试图让StageVideo在我的应用中正常工作,但出现了问题。我需要一个接一个地播放一系列视频,第一个视频总是可以正常播放,但是其他视频只能播放音频,而StageVideo将显示第一个视频的最后一帧。

好像StageVideo已冻结并正在播放视频,但我看不到(只能听到)。我已经在这里发布了完整的代码:

我正在用Adobe Air 3.2 beta在iPad2上进行测试,但也用3.1和相同的结果进行了测试。

这是我的视频课:

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{}

}

}

这是我在框架中使用的代码:
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');
}

最佳答案

在解决了这个错误并完全重写代码之后,我发现原因是因为我没有清除附加到StageVideo的netStream引用,即StageVideo.attachNetStream(null);

每个新视频播放之前/之后都需要清除此设置。

第二次调用attachNetStream()之前,请先调用当前
附加的NetStream对象的close()方法。调用close()版本
播放涉及的所有资源,包括硬件解码器
视频。然后,您可以彼此调用attachNetStream()
NetStream对象或null。

  • http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/StageVideo.html#attachNetStream%28%29
  • 关于ios - 适用于iOS的AS3 AIR-StageVideo无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9698925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com