NetConnection, NetStreamを使ってFLVを再生しようとするとランタイムエラーが発生しました。
Error #2095: flash.net.NetStream was unable to invoke callback onMetaData.
今回再生しようとしているFLVはビデオプロダクションから提供されたもの。
どのように作られたかがわかりません。
後述しますがプロが制作したとは思えないひどい代物です。
Flex 3ヘルプによると、FLVにメタデータまたはキューポイント情報が含まれ、適切なリスナーが定義されていない場合に送出される、らしい。
メタデータやキューポイントを使ってなにもする予定も無いのにそんなFLVデータを送られても迷惑な話です。
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=Working_with_Video_10.html
リスナーを設定することで対処できるらしいです。
Adobe Developer Connection / Flash Developer Center /
Handling metadata and cue points in Flash video
var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.client = new Object(); ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); var myVideo:Video = new Video(); myVideo.attachNetStream(ns); addChild(myVideo);
var customClient:Object = new Object(); customClient.onMetaData = metaDataHandler; var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.client = customClient; ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); var myVideo:Video = new Video(); myVideo.attachNetStream(ns); addChild(myVideo); function metaDataHandler(infoObject:Object):void { myVideo.width = infoObject.width; myVideo.height = infoObject.height; }
var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.client = new CustomClient(); ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); var vid:Video = new Video(); vid.attachNetStream(ns); addChild(vid); // The CustomClient class is as follows: package { public class CustomClient { public function onMetaData(infoObject:Object):void { trace("metadata"); } } }
3番目のCustomClient Classを作成する方法で対処しました。
次にonXMPDataへのエラーもでたので実際のCustomClient Classは以下のようにしました。
Error #2095: flash.net.NetStream was unable to invoke callback onXMPData.
package { public class CustomClient { public function onMetaData(infoObject:Object):void { trace("onMetaData"); } public function onXMPData(infoObject:Object):void trace("onXMPData"); } } } |
でFLVの話です。
提供されたFLVの拡張子は.f4v、HDビデオらしいのですがなぜかCODECはOn2 VP6、SDです。
インターレース除去に失敗している箇所が各所に見られる素人同然のデータです。
こんなにブザマなEncodeしかできないならまかせて欲しかった。
ビデオプロダクションも放送用の仕事が減りデジタルメディア向けの仕事にシフトしているところが多いと聞く昨今ですが、あまりにもCODECの知識が無いことに驚かされることがあります。
映像のプロとしてのプライドがあるのは構わないのですが、ブロードキャストとデジタルメディアでは最終データ形式が違うことに早く気がついて欲しいと思わされることがあります。
ブロードキャストもHDに移行が始まりHD, SD素材が混在したデータの取扱には今までのノウハウだけでは対応できないことがあります。
実際にテレビを見ていても番組やCMなどでインターレース除去に失敗していることがあります。
なんか気になってしょうがない今日この頃です。