« SecurityDomain周り | Home | Supported Character Sets »

Apr 132009

URLStreamでFLVを再生する

イメージやらswfは特に問題ないが、flvってどうやるんだろう?
attachStreamにURLStreamを割り当てるわけでもないだろうし・・・。

誰かやっている人とかいるのかしら??
(まぁそんな需要もないかもしれんのだけど)

同じ結論に行き着いたスレッドを発見したのでメモ。
http://pc12.2ch.net/test/read.cgi/swf/1216151218/

160 :Now_loading...774KB:2009/08/16(日) 12:40:30 ID:BH5EXFvM あぁ、書こうと思ってた心配事がとりあえず的中。 原因はつまり、>>158 氏の話の通りだ。 多分過去の仕様を引き継いで 強引に形を変えつつ、増築を繰り返してる&API仕様の整理が出来て無いのか、ライブラリがバラバラ。

具体的にどういう事があったかメモしとくとこんな感じ。 丁度 >>159 の話ともリンクするけど、
俺がやろうとしてた事は、かいつまんで言えば画像、音、動画(FLV)を、特に分け隔てもせずに動的にロードしつつ、再生するものだった。
実際には他にも色々行っているけど、その中の一部として、これをやりたかった。 そしてハマった。

結果、結局さんざん調べてどうやら出来ないとの結論に達して、別の観点で自分で整理して、継承したクラスいくつか作って
再管理する形にしたけど、この 「どうやら出来ない」 って結論に辿り着いた理由ってのが、まさにこのバラバラな作りのせい。

何かの役に立つかもしれないので、念のためまたメモしとく(続く)

161 :Now_loading...774KB:2009/08/16(日) 13:08:53 ID:BH5EXFvM
(続き 1/2) 
差し当たり、自サバのCGI(Perl/PHP)にパラメタをPOSTして、そのレスポンスとして flv ファイルを取得し、それを表示したかった。
画像と音はさくっと完成。 しかし flv でハマる。 結果、GETで投げれば普通に出来たんだが、POSTじゃないと困る部分があったので、そうしたかった。
しかし出来なかった。 その理由を具体的に以下に記す。 原因は上でも書いた通りクラスが一部独自仕様になっており、絶妙にバラバラに作られてたせい。

まず前提として、 flash.net.URLStream と flash.net.NetStream がまったく別物。 一見似てるけど全然別物。 どういう事かと言うと、
継承関係がまず Object ← EventDispatcher ← ほげほげStream となっていて、Stream 抽象クラスのような物は無いし、インタフェースインプリメントの状態もまったく別。
と言うか、 NetStream は IDataInput インタフェースを実装していない。 かと言って、上で書いたダックタイプな手法でごまかそうにも、メソッドのシグネチャが違うので無理。

つまり、この2つは相互に入れ替えが出来ない。 やろうとした事から考えると、NetStream がもしもインタフェースインプリしてたら、自前クラスで機能補完できたんだけど、
それも出来ず、かといって AS3 は多重継承も出来ないので、結果、出来ない。


162 :Now_loading...774KB:2009/08/16(日) 13:11:50 ID:BH5EXFvM
(続き 2/2)
それならばと、URLStream でバイナリデータを自前でロードし、それを使おうと思ったが、今度は NetStreamにバイナリデータを受け取る口がない。
それならばと目の前の目的である flash.media.Video に渡そうと思ったが、それ自身バイナリデータを受け取るインタフェースが無い。 よって自前でロードして渡す案も出来ない。

それならば仕方が無いので、画像、動画、音声の共通抽象クラスを定義して自前で再実装、NetStream と URLStream に自前で共通のインタフェース定義して、
それをベースに書いてしまえと書いてみたが、ここで致命傷発覚。 つまり、NetStream には POSTデータが渡せない。 というか、HTTP-POSTを投げる方法が無い。
URLStream ならば、URLRequest を引数に取るのでどんなHTTP-METHODでも送信できるが、NetStream は NetConnection とだけ仲良しで、自由なHTTP送信は出来ない。
そして、flash.media.Video は、NetStream, NetConnection しか受け取らない。 そして、flv ファイルのデコードは、flash.media.Video 内のネイティブ実装コードが行っている。

という訳で、ここで詰んだ。

ちなみに現状は、とりあえずもっと上位レベルで自前で管理を揃えてます。 画像、音声、動画を同じように非同期でロードしつつ、どれも同じように 扱えるクラス書いて。
NetConnection/NetStream って、どうやら Flashサーバ向けの固有実装っぽい。 ハードコード祭りらしく、その理由はおそらく >>159

6 Comments

そもそもVideoという概念ではないのか?シーケンス的に処理する必要があるのだろうか?(FLV自体がシーケンスなのかしらんけど)

"low level"を"低レベル"以外でなにか表現する良い日本語はないのだろうか?低水準言語という元々の表現もなんか誤解を受けそうな気もするのだけど・・。

低次、ではだめなんでしょうか...
僕はプログラムをゴリゴリやるわけではないので
よくわかってないのですが...それだけに上の表現が
当てはまるなら門外漢にも有効かと...
失礼しました。。

もうこれは個人的な感覚だと思うんですが、オデは「低」=「レベルの劣っている」って印象が強いのです。

強いて言うなら「生」「根幹」「基幹」「コア」「深い」とかそんな印象なんです。(RAWではないんですけどね・・)

言語的にLOWってのは十分承知しているのですけどね。なんかすーっとドキュメントを読んでいるといつもその違和感を補正しながら読む必要がでてくるのがちょっと面倒なんです。英語で読めばよいだけなんですけど・・。

理工系でないものがこの手の "low level" の日本語表現を目にすると
+39さんとは真逆で、「コア」とかそういうムードが立ち上がってきますけど、
不思議です。。

でもまぁlowでもcoreでもbasicでもどこを基点とするのかやら、
その基点に関する基礎教養とかで読み方も変わりますしね。。

突然のコメントで失礼しました。。

理工系であるということよりも、画像のlow resolution=低解像度とかの印象が強いのかもしれません。low=「あんま良くない」みたいな・・・。
わかんないですけど・・。

Leave a comment

Search and Archives