ユーザーのローカル ハードディスクに保存されている FLV ファイルに Web カメラのビデオとオーディオを記録しようとしています。NetConnection と NetStream を使用してネットワーク経由でビデオを FMS (Red5) サーバーにストリーミングするこのコードのバージョンがありますが、低帯域幅/不安定なネットワークの状況でビデオをローカルに保存できるようにしたいと考えています。私は FLex 3.2 と AIR 1.5 を使用しているので、これが発生しないようにするサンドボックスの制限があるべきではないと思います。
私が見たもの:
- FileStream - ローカル ファイルの読み取りと書き込みを許可しますが、FLV を作成するための .attachCamera および .attachAudio メソッドは許可しません。
- flvrecorder - Web カメラからスクリーン グラブを生成し、独自の flv ファイルを作成します。オーディオをサポートしていません。ライセンスは商用利用を禁止しています。
- SimpleFLVWriter.as - 奇妙なライセンスのない flvrecorder に似ています。オーディオには対応していません。
- このスタックオーバーフローの投稿- NetConnection/NetStream を使用してローカル ディスクからビデオを再生する方法を示しています。
NetStream を使用してサーバーにストリーミングするバージョンが既にあることを考えると、最後のバージョンが最も有望であると考え、先に進み、このデモ アプリケーションをまとめました。コードはエラーなしでコンパイルおよび実行されますが、ディスク上に停止ボタンがクリックされた FLV ファイルがありません。-
<mx:Script>
<![CDATA[
private var _diskStream:NetStream;
private var _diskConn:NetConnection;
private var _camera:Camera;
private var _mic:Microphone;
public function cmdStart_Click():void {
_camera = Camera.getCamera();
_camera.setQuality(144000, 85);
_camera.setMode(320, 240, 15);
_camera.setKeyFrameInterval(60);
_mic = Microphone.getMicrophone();
videoDisplay.attachCamera(_camera);
_diskConn = new NetConnection();
_diskConn.connect(null);
_diskStream = new NetStream(_diskConn);
_diskStream.client = this;
_diskStream.attachCamera(_camera);
_diskStream.attachAudio(_mic);
_diskStream.publish("file://c:/test.flv", "record");
}
public function cmdStop_Click() {
_diskStream.close();
videoDisplay.close();
}
]]>
</mx:Script>
<mx:VideoDisplay x="10" y="10" width="320" height="240" id="videoDisplay" />
<mx:Button x="10" y="258" label="Start" click="cmdStart_Click()" id="cmdStart"/>
<mx:Button x="73" y="258" label="Stop" id="cmdStop" click="cmdStop_Click()"/>
</mx:WindowedApplication>
上記のコードに問題があり、動作を妨げているか、NetStream をこのように乱用してビデオを録画することはできないようです。
私が知りたいのは、a) 上記のコードのどこが (もしあれば) 間違っているのですか? b) NetStream がディスクへの記録をサポートしていない場合、オーディオとビデオをユーザーのローカル ハードディスク上のファイルにキャプチャする代替手段はありますか?
前もって感謝します!