13

.NETスタックで利用可能なテクノロジー/ライブラリ(サードパーティのdllのラッパーでさえ)を見つけようとしています。これは、次のことができるアプリの構築に役立ちます。

  • 1-ユーザーのビデオデバイスから画像をキャプチャします
  • 2-サーバーにリアルタイムでアップロードします
  • 3-(サーバーで)ビデオを処理します-例:ビデオに透かしを追加します
  • 4-ユーザー/他のユーザーにストリーミングバック

できれば、ステップ2と4の間の時間遅延/待ち時間を最小限に抑える必要があります

最初の要件(キャプチャ)は非常に簡単に思えます。課題は、アップロードを実行し、処理を実行して、それをストリーミングする適切な方法を特定することです。有効な提案やアイデアはありますか?

最近acrsossFFmpegライブラリが登場し、C#ラッパーがあります。FFmpegを使用して処理側を行うことはできますか?

4

6 に答える 6

13

私はそれについてこのように行きます:

  1. Silverlightまたはフラッシュを使用して、ビデオカメラの入力をキャプチャします(例:ここで詳しく説明します) 。
  2. サーバーがリッスンしているソケットを介してバイトストリームを送信できます。
  3. 受信側では、ソケット受け入れプログラムをルータープログラムとして使用し、多数のリスニングワーカーを接続します。ワーカーとルータープログラムの間。たとえば、AMQPとRabbitMQの間。非同期メッセージ(たとえば、リアクティブ拡張機能を使用)を、たとえばストリームエンコーディングを使用してrabbit-nodeに送信します。これにより、会話/ユーザーセッションの一部としてすべてのメッセージを1台のコンピューターに送信するか、使用可能なワーカー間でインターリーブできます。これがマニュアルです。ビデオがエンコードされると、メッセージバスを介して非同期にストリーミングされます。Intelのテストによると、バス自体は高スループットで正常に動作するはずですが、インターリーブされたtcpチャネルモードを使用する必要がありました(ギガビットLANでテストされています)。ここにいる他のユーザーはFFlibを提案していますワーカーをwebMに変換することも検討するかもしれませんが、FFlibが機能する場合は、はるかに簡単な場合があります。各ワーカーは、AMQPを介して次のエンコードされたビデオ作品を公開します。サーバーを実行するプログラム(前に説明したルータープログラムなど)がクライアントへの送信を開始します(4番を参照)。
  4. クライアントプログラム(たとえば、silverlight / flash接続(たとえば、クライアント->サーバーデータ用に開いたのと同じソケット、またはHTTP)を使用)を用意し、デコーダーを使用してバイトストリームを読み取ります。出力をレンダリングします。
于 2010-08-05T15:53:07.993 に答える
3

MitovのVideoLabはこれらすべてを実現でき、個人使用は無料です(商用利用はそれほど無料ではありませんが、価格はそれほど高くありません)。

私はDelphiバージョンを購入して使用しましたが、それが非常にうまく機能することを知っているので、.NETバージョンが必要なことを実行すると確信しています。

この種のタスクは簡単ではありません(ここでの応答の欠如からわかるように)ので、DirectX / Microsoft Media Encoderとかなり苦労することを期待してください-しかし、このツールキットと作者の助けがあれば、最終的には成功します。

http://www.mitov.com/html/videolab.html

于 2010-07-31T11:40:14.303 に答える
2

Splicerは静的なビデオを処理して変換できるようです-リアルタイムでアップロードされたビデオを処理するかどうかはわかりません-http ://splicer.codeplex.com/

于 2010-07-30T05:20:59.560 に答える
2

VertigoによるVideo.Showをご覧ください。これは、ユーザーが作成したビデオコンテンツのオープンソースWebサイトです。圧縮/ビデオ編集を処理するためにExpressionEncoderを使用します。それはあなたが必要としているものではありませんが、良いスタートです!

于 2010-08-05T15:57:02.387 に答える
2

上記のようにSilverlightをキャプチャに使用してから、 Expression Encoderを使用して、Silverlightをストリームサーバーにプッシュするか、そこから直接ストリームすることができます。

必要なものがすべて揃っているはずです。

ソースもWMVであり、フレーム操作が実行されていない場合のWMVのスマートエンコーディング/スマート再圧縮[4]、カット編集、シリアルバッチエンコーディング、WebカメラおよびDVカムコーダーからのライブエンコーディング

DirectShowによるデコード/インポートフォーマットのサポート

最適化されたクライアント(Silverlight)とサーバー(スムーズストリーミングを備えたIIS)を使用したスムーズストリーミング(HTTPを使用した720p以上のビデオ)

WebDAVパブリッシング、Silverlight Streaming、AmazonS3用のパブリッシングプラグイン

式デザインで作成されたXAMLオーバーレイをインポートし、それらのタイミング、アニメーション、不透明度、配置、およびループをカスタマイズします

JavaScriptトリガーイベント

Windows Media 11SDKとVC-1SDKの統合、ネイティブMPEG-2デコーダー

SAMIまたはW3CTimedText形式を使用してビデオにキャプションを追加する

エンコーディング設定のリアルタイムでのプレビューと比較

画面キャプチャ

エンコーディングエンジンのオブジェクトモデル、SDKは別途ダウンロード可能

于 2010-08-07T10:52:22.730 に答える
1

質問は詳細(これはWebサーバーですか、サーバーは何ですか?など)については少し短いですが、私はあなたがやろうとしていると思うことに基づいて突き刺します。

検討する可能性のあることの1つは、キャプチャと処理を一度に実行することです。ユーザーがクライアントアプリを実行している場合は、DirectShowを介してキャプチャと処理を実行してもらいます。次に、ビデオをアップロードするだけで、サーバープロセス全体をスキップできます。これは、「ユーザー」があなたの管理下にあることを前提としています。これは、動画をアップロードしているランダムな人物ではなく、従業員またはその他の信頼できる人物です。

そうでない場合は、ffmpegを使用してサーバー上のビデオに透かしを入れることができます。あなたは本当にそれのために「ラッパー」を必要としません。サーバーアプリケーションからコマンドラインアプリとして呼び出すだけで、終了するのを待つことができます。

プロセスは実際にはそれほど複雑ではありません...重要になる詳細(たとえば、「ストリーム」はあなたにとって何を意味しますか?本当に「ストリーム」を意味しますか、それともhttp経由ですか?それはまさにそこにある大きなトピックです)。

于 2010-08-04T21:40:12.677 に答える