8

ユーザーのローカル ハードディスクに保存されている 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 がディスクへの記録をサポートしていない場合、オーディオとビデオをユーザーのローカル ハードディスク上のファイルにキャプチャする代替手段はありますか?

前もって感謝します!

4

5 に答える 5

2

私の解決策は、Red5 を AIR に埋め込むことでした。私の記事をあなたと共有する

http://mydevrecords.blogspot.com/2012/01/local-recording-in-adobe-air-using-red5.html

一般的には、無料のメディア サーバー Red5 をアセットのように AIR に埋め込むことで解決します。したがって、サーバーはAIRアプリケーションフォルダーに存在します。次に、NativeProcess を介して Red5 を実行し、そのインスタンスをメモリ内に置くことができます。その結果、ネットワークの問題なしでローカル ビデオ録画を行うことができます。

于 2012-01-12T17:47:45.957 に答える
2

It is not possible To stream video directly to the local disk without using some streaming service like Windows Media encoder, or Red5 or Adobe's media server or something else.

I have tried all the samples on the internet with no solution to date.

look at this link for another possibility:

http://www.zeropointnine.com/blog/updated-flv-encoder-alchem/

于 2012-01-17T05:26:07.863 に答える
0

まあ、何にも接続させない(NULL)のはうまくいかないと思います。私はすでに彼にローカルホストへの接続を試みさせましたが、それもうまくいきませんでした。これも不可能だと思います。ビデオのストリーミングは、Flash Media ServerとRed5でのみ機能し、ローカルでは機能しません。たぶんあなたはあなたのPCにRed5をインストールすることができますか?

于 2010-04-25T17:27:29.700 に答える
0

残念ながら、カメラからのフラッシュでのビデオ サポートは非​​常に貧弱です。生でストリーミングする場合、問題はFLVにエンコードする必要があり、リアルタイムで実行するには非常に高速なコンピューターが必要になることです. 第 1 世代の概念では、未加工のビットマップをファイルに書き込み (または配列をシリアル化)、次に 2 番目の方法でファイルを FLV に変換します。基本的に、カメラをポーリングし、各フレームをビットマップとして保存してから配列にスタックする必要があります。これは非常に限られており、オーディオを行うことができませんでした。また、5 ~ 10 fps を超えることも非常に困難でした。

ゼロ・ポイント・ナインの紳士が新しいバージョンを思いつき、あなたは正しい道を歩んでいます。新しい flv レコーダーを見てください。私はこれに多くの時間を費やしましたが、私のニーズ (2 台のカメラ) に完全に対応することはできませんでした。必要なFPSを取得できませんでした。しかし、それはあなたのために働くかもしれません。元の方法よりもはるかに高速でした。

私が知っている唯一の他の有効なオプションは、Red5 でビデオを保存し、それをアプリにダウンロードすることです。

于 2011-11-01T18:55:54.800 に答える