flvをリピート再生するのに数日悩んでおりました。
ActionScript3でFLVをストリーミングでリピート再生
こちらさんを参考にやってるのだが、clientのonPlayStatus()はいっこうに呼ばれない、、、。そういうもんなのかな。リファレンスを見る限りでは、サーバ用みたいなことがかいてあるので、そういうもんかもしれないな。とりあえずplay/stopあたりとバッファのイベントを使ってできたみたいなので、続きにコードを公開。
import org.flashdevelop.utils.FlashConnect; import flash.display.Sprite; import flash.events.*; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.text.*; public class PreviewPanel extends Sprite { private var _connection:NetConnection; private var _stream:NetStream; private var _stopped:Boolean; private var _media:String; public function PreviewPanel() { _connection = new NetConnection(); _connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); _connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); play("sample.flv"); } /** 指定メディアを再生します */ public function play(media:String):void { _media = media; if (_connection) _connection.close(); _connection.connect(null); } private function netStatusHandler(evt:NetStatusEvent):void { switch (evt.info.code) { case "NetConnection.Connect.Success": initVideo(); break; case "NetStream.Play.Start": _stopped = false; break; case "NetStream.Play.Stop": _stopped = true; break; case "NetStream.Buffer.Flush": // FlashConnect.trace('flush time: ' + _stream.time); break; case "NetStream.Buffer.Empty": // FlashConnect.trace('emtpty time: ' + _stream.time); if (_stopped) { stream.play(_media); } break; case "NetStream.Play.StreamNotFound": FlashConnect.trace('file not found: ' + _media); break; default: FlashConnect.trace('event: ' + evt.info.code); } } /** Videoコンポーネントの初期化 */ private function initVideo():void { _stream = new NetStream(_connection); _stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); _stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHnadler); _stream.client = new StreamClient(_stream); var video:Video = new Video(200, 150); video.x = 0; video.y = 0; addChildAt(video, 0); video.attachNetStream(_stream); _stream.play(_media); } private function asyncErrorHnadler(evt:AsyncErrorEvent):void { FlashConnect.trace('async error: ' + evt.toString()); } private function securityErrorHandler(evt:SecurityErrorEvent):void { FlashConnect.trace('security error: ' + evt.toString()); } } |
コメント