1

私はh264フラッシュプレーヤーに取り組んでいます。http 接続を介して生の h264 のバイトストリームを (ip cam から) 取得しており、それを再生する必要があります。私の知る限り、フラッシュはストリームを直接再生できません。flv コンテナーにラップする必要があります。したがって、バイト配列を取得し、00 00 00 01 (NAL 開始プレフィックス コード) を検索し、このフレームに FLV タグを追加してから、NetStream.appendBytes() を使用してこれを最終的にステージに追加する必要があります。問題は、それが正しい方法かということです。つまり、これらのフレームに FLV タグを追加するだけで、生の h264 を flv ストリームに変換できますか? IPカムから生のh264を再生するもっと簡単な方法があるかもしれませんか?

4

1 に答える 1

1

こんにちは。そのことから、Adobe は PlayBack に関しては約 12 年の歴史があることを知っています…だから、もしあなたがそれを使い続けているなら --- YouTube はまだそれを使っています..?

objectEncoding プロパティの値を、フレーム [注文ファイル] の内容のヘッダーと共に取得する AS3 の例をまとめました。Binary で必要なものを生成するには、appendBytes () での呼び出しを利用します。これにより、FLV タグが完了するまで FIFO にバイトが追加されます…FLV タグが完了すると、appendBytes() の呼び出しを使用してバッファ [スレッド: 再生] に移動します。このバッファは、FLV タグをいつ使用するかを通知します。完全な FLV タグを形成しない残りのバイトは、FIFO の FIFO バイト (再生バッファに移動) に入ります。

次にオプション 2 を示します。NetStream オブジェクトには 2 つのバッファがあります。appendBytes () から NetStream () オブジェクトへの FIFO と [playout] バッファです。FIFO は再構成された部分的な FLV タグです。不完全な FLV タグが 1 つしか含まれていません: NetStream .seek の呼び出し。|| フラッシュ || バッファ。Seek は次へのネイティブ アクセスを提供します:
appendBytesAction -> readObject -> object... ここで、データは ByteArray からシリアル化された AMF に格納されます。

次の例では、注文ファイルを (filename || data の場所) から ByteArray (バイト単位) に読み込み、圧縮を解除し、readObject () を呼び出して each () ループ構造に格納し、各ノードを表示に追加します。 :

package 
{
import flash.display.*; 
import flash.events.*; 
import flash.net.*; 
import flash.filesystem.*; 
import flash.utils.ByteArray;
import flash.utils.*;

function wBytes(file:String, data:ByteArray):void{  
     var oFile:File = File.desktopDirectory;
     oFile = oFile.resolvePath(file);
     var oStream:FileStream = new FileStream();
     oStream.open(oFile, FileMode.WRITE);
     oStream.writeBytes(data, 0, data.length); 
     oStream.close(); 
     var iFile = iFile.resolvePath(file);
     var iStream:FileStream = new FileStream();
     iStream.open(iFile, FileMode.READ);
     iStream.readBytes(data);
     iStream.close();
 }
 function readBinBytes():void {
     var iBytes:ByteArray = new ByteArray();
     readFileIntoByteArray("order", iBytes);
     iBytes.position = 0; 
     iBytes.uncompress(CompressionAlgorithm.DEFLATE);
     iBytes.position = 0
     var uVariables:UVariablesiables = new UVariablesiables( "one=1&two=2" )
     uVariables.decode("amp=" + encodeURIComponent( "&" ) );
     uVariables.tree = 3; 
     uVariables.amp2 = "&&";
     var urlRequest:URLRequest = new URLRequest()
     urlRequest.data = uVariables;

     readFileIntoByteArray("order", iBytes);
     iBytes.position = 0;
     iBytes.uncompress(CompressionAlgorithm.DEFLATE); 
     iBytes.position = 0;    
}
function readFileIntoByteArray(Name:String, data:ByteArray):void{
     var fIN:File = File.desktopDirectory
     fIN = fIN.resolvePath(Name)
     var FS:FileStream = new FileStream();
     FS.open(fIN, FileMode.READ);
     FS.readBytes(data);
     FS.close()
     var rq:URLRequest = new URLRequest(FS)
     var variables:URLLoader = new URLLoader();
     variables.dataFormat = URLLoaderDataFormat.VARIABLE
     variables.addEventListener(Event.COMPLETE, function push(event:Event) 
                                               { variables = URLLoader(event.target) }
     try{variables.load(rq} 
         catch(error:*){} 
}

}

これらの 3 つのメソッドは、RAW H.26+ を使用するほとんどの再生環境で速度とロジックの両方を提供する必要があります。それはすべてを解決するものではありませんが、数週間かかる可能性のある何かに取り組んでいます. 幸運を。

于 2013-07-14T14:50:56.660 に答える