膝の上のメディアマトリックスの作成

多くの場合、複数の未接続デバイスからオーディオ信号を受信し、受信した信号を複数の未接続スピーカーに提供する必要があります。 多くは、BiAMP、Kramer、Parantirなどによる管理と連携したKramerメディアマトリックスを介してこれを行いますが、この機器には費用がかかり、お金が常にあるとは限りません。



基本的な機能では上記の製品に劣らない予算オプションについて説明します。 また、管理の観点からは、より柔軟になります。

このプロジェクトでは15台のメディアサーバー(Windows 7)を使用します。各メディアサーバーには、プラズマとプロジェクターに表示される独自のビデオシーケンスと、ビデオシーケンスに伴うオーディオストリームがあります。 オーディオストリームを出力できる3つのスピーカーもあります。



構造について少し。

ビデオシーケンスは、サーバールームからDVIおよびVGA信号コンバーターを介して、サーバールームから50メートル離れた場所にある機器にブロードキャストされます。 内蔵または外部スピーカーを使用して音声信号をブロードキャストすると、不協和音が発生し、表示されたコンテンツを知覚できなくなります。 サウンドを再現するために、15台のメディアサーバーを3つのグループに分割し、オーディオ信号を地理的にプラズマとプロジェクターに近い3つの異なる音響システムに切り替えることにしました。



サウンドの切り替えはリモートで制御する必要があるため、どこかで切り替える必要があります。 物理スイッチングは古くて信頼できるものですが、私たちはデジタル技術の時代に生きています。 したがって、数字を使用してサウンドを切り替えますが、デジタルストリームを取得するには、どこかから取得する必要があります。



コンピューターに仮想オーディオケーブルドライバーをインストールします。

これらのドライバーは、システムのすべてのサウンドを送信し、プログラムを使用してデジタル形式のサウンドストリームを削除できる仮想サウンドカードです。



この例では、通常のffmpegが使用されます。



オーディオデバイスのリストを取得するには、次のキーを使用してffmpegを実行する必要があります。

 C:\ Progs \ ffmpeg \ bin> ffmpeg -list_devices true -f dshow -i dummy
 [dshow @ 00000000020a77e0] DirectShowビデオデバイス
 [dshow @ 00000000020a77e0]「Logitech HD Webcam C310」
 [dshow @ 00000000020a77e0] DirectShowオーディオデバイス
 [dshow @ 00000000020a77e0]「マイク(HD Webcam C310)」
 [dshow @ 00000000020a77e0] "ケーブル出力(VB-Audio Virtual")




オーディオストリームを撮影するデバイスは、「CABLE Output(VB-Audio Virtual)」です。



システムのすべてのサウンドが出力されるデバイスは「ケーブル入力(仮想オーディオケーブル)」になります。







ffmpegを起動し、ネットワークでデータをブロードキャストします。

 C:\ Progs \ ffmpeg \ bin> ffmpeg -re -f dshow -i audio = "CABLE Output(VB-Audio Virtual" -f mp3 udp://239.1.1.1:5001
 ffmpegバージョンN-49610-gc2dd5a1 Copyright(c)2000-2013 FFmpeg開発者
   2013年2月5日13:26:02にgcc 4.7.2(GCC)で構築
   libavutil 52.17.101 / 52.17.101
   libavcodec 54.91.100 / 54.91.100
   libavformat 54.61.104 / 54.61.104
   libavdevice 54.3.103 / 54.3.103
   libavfilter 3. 35.101 / 3. 35.101
   libswscale 2. 2.100 / 2. 2.100
   libswresample 0. 17.102 / 0. 17.102
   libpostproc 52.2.100 / 52.2.100
 [dshow @ 00000000024de080]ビットレートから継続時間を推定しますが、これは不正確かもしれません
入力ストリーム#0.0の推定チャネルレイアウト:ステレオ
入力番号0、dshow、「audio = CABLE Output(VB-Audio Virtual」から:
  期間:N / A、開始:270550.167000、ビットレート:1411 kb / s
    ストリーム#0:0:オーディオ:pcm_s16le、44100 Hz、ステレオ、s16、1411 kb / s
出力#0、mp3、「udp://239.1.1.1:5001」:
  メタデータ:
     TSSE:Lavf54.61.104
    ストリーム#0:0:オーディオ:mp3、44100 Hz、ステレオ、s16p
ストリームマッピング:
  ストリーム#0:0->#0:0(pcm_s16le-> libmp3lame)
 [q]を押して停止します。[?]ヘルプが必要です
サイズ= 100kB時間= 00:00:06.37ビットレート= 128.5kbits / s




このストリームは、ネットワーク上の任意のプレーヤー(ffplay、vlcなど)で聴くことができます。 必要に応じて、コーデックとビットレートを変更できます。

基本的なセットアップが完了し、サウンドが受信され、ドライバーが15のメディアサーバーに複製され、15の異なるストリームを受信すると、「聞く方法と切り替える方法」という疑問が生じます。



鉄と資源を節約するという観点から、音響に音響を出力する多数のオーディオカードを備えた単一のマシンを使用できます。 現在、市場には十分な小型USBオーディオカードがあります。 使いやすさの観点からすると、安価なala CMEDIAカードは内部にシリアル番号がなく、リブート後にどのカードが機能し始めたのかを判断することはできません。 私は「Creative SB Play!」カードを使用しました。このカードはかなり良い音を出し、システムでそれらを識別する能力を持っています。



なぜなら USBオーディオカードを接続すると、動的な番号が割り当てられ、devdに対して一連のルールが記述されました。



添付50 {
         match "device-name" "uaudio [0-9] +";
         match "sernum" "[0-9A-Za-z] +";
         「モード」「ホスト」に一致。
        アクション "ロガーUSBオーディオS / N:$ sernumが添付されています";
        アクション "ln -fs / dev /` head -n 1 / tmp / $ device-name.dsp` /dev/$device-name.dsp ";
        アクション "ln -fs /dev/$device-name.dsp /dev/uaudio.serial.$sernum";
        アクション "rm /tmp/$device-name.dsp";

         match "device-name" "uaudio [0-9] +";
         match "hubaddr" "[0-9] +";
         match "port" "[0-9] +";
         match "devaddr" "[0-9] +";
        アクション「エコー$ device-name at ugen。$ port。$ devaddr」;
        アクション "ln -fs /dev/$device-name.dsp /dev/uaudio.ugen.$port.$devaddr";

 };

添付50 {
         match "device-name" "uaudio [0-9] +";
         「sernum」「$」に一致;
         「モード」「ホスト」に一致。
        アクション「シリアル番号のないロガーUSBオーディオが添付されています」。
        アクション "ln -fs / dev /` head -n 1 / tmp / $ device-name.dsp` /dev/$device-name.dsp ";
        アクション "rm /tmp/$device-name.dsp";

         match "device-name" "uaudio [0-9] +";
         match "hubaddr" "[0-9] +";
         match "port" "[0-9] +";
         match "devaddr" "[0-9] +";
        アクション「エコー$ device-name at ugen。$ port。$ devaddr」;
        アクション "ln -fs /dev/$device-name.dsp /dev/uaudio.ugen.$port.$devaddr";

 };

添付40 {
         match "device-name" "pcm [0-9] +";
         match "bus" "uaudio [0-9] +";
         action "loggerは$ busで$ device-nameを見つけました。保存します。";
        アクション "echo -n $デバイス名| sed -E 's / pcm / dsp /' >> /tmp/$bus.dsp";
 };

デタッチ40 {
         match "device-name" "uaudio [0-9] +";
         match "bus" "uhub [0-9] +";
        アクション "ロガーDroping dsp symlink for $ device-name";
        アクション "find / dev / -type l -ls | awk '$$ NF〜/$device-name\./ {print $(NF-2)}' | xargs rm";
        アクション "rm -f /dev/$device-name.dsp";
 };

通知50 {
         「type」「DETACH」に一致。
         「モード」「ホスト」に一致。
         match "sernum" "[0-9A-Za-z] +";
        アクション「ロガーUSBオーディオS / N:分離された$ sernum」。
 };




/dev/uaudio.serial。<SerialNumber> 」の形式で接続機器へのシンボリックリンクを形成します。その結果、デバイスのリストは次のようになります。



 lrwxr-xr-x 1ルートホイール16 May 15 09:27 /dev/uaudio.serial.131014000129-> /dev/uaudio1.dsp
 lrwxr-xr-x 1ルートホイール16 May 15 09:23 /dev/uaudio.serial.140210000BB2-> /dev/uaudio0.dsp
 lrwxr-xr-x 1ルートホイール16 May 15 09:23 /dev/uaudio.ugen.5.6-> /dev/uaudio0.dsp
 lrwxr-xr-x 1ルートホイール16 May 15 09:27 /dev/uaudio.ugen.5.7-> /dev/uaudio1.dsp
 lrwxr-xr-x 1ルートホイール16 May 15 08:37 /dev/uaudio.ugen.5.8-> /dev/uaudio2.dsp
 lrwxr-xr-x 1ルートホイール9 May 15 09:23 /dev/uaudio0.dsp-> / dev / dsp6
 lrwxr-xr-x 1ルートホイール9 May 15 09:27 /dev/uaudio1.dsp-> / dev / dsp7
 lrwxr-xr-x 1ルートホイール9 May 15 08:37 /dev/uaudio2.dsp-> / dev / dsp8




これにより、カードとカードが提供するスピーカーシステムを一意に識別できます。



何が起こっているかに関する情報も記録されます。



 5月15日08:35:31 franky zhecka:USB Audio S / N:131014000129が添付されています
 5月15日08:35:36 franky zhecka:uaudio2でpcm8が見つかりました。 保存中。
 5月15日08:35:36フランキーカーネル:uaudio2:<vendor 0x0d8c Generic USB Audio Device、class 0/0、rev 1.10 / 1.00、addr 8> on usbus5
 5月15日08:35:36フランキーカーネル:uaudio2:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:再生:48000 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:記録:48000 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:35:36フランキーカーネル:uaudio2:MIDIシーケンサーなし。
 5月15日08:35:36フランキーカーネル:pcm8:<USBオーディオ> on uaudio2
 5月15日08:35:36フランキーカーネル:uaudio2:HIDボリュームキーが見つかりました。
 5月15日08:35:37 franky zhecka:シリアル番号のないUSBオーディオが添付されています
 5月15日08:37:11 franky zhecka:uaudio2のdspシンボリックリンクの削除
 5月15日08:37:11フランキーカーネル:uaudio2:uhub6、ポート3、アドレス8(切断)
 5月15日08:37:15 franky zhecka:uaudio2でpcm8が見つかりました。 保存中。
 5月15日08:37:15フランキーカーネル:uaudio2:<vendor 0x0d8c Generic USB Audio Device、class 0/0、rev 1.10 / 1.00、addr 8> on usbus5
 5月15日08:37:15フランキーカーネル:uaudio2:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:再生:48000 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:記録:48000 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日08:37:15フランキーカーネル:uaudio2:MIDIシーケンサーなし。
 5月15日08:37:15フランキーカーネル:paudio8:<USBオーディオ> on uaudio2
 5月15日08:37:15フランキーカーネル:uaudio2:HIDボリュームキーが見つかりました。
 5月15日08:37:15 franky zhecka:シリアル番号のないUSBオーディオが添付されています
 5月15日09:17:56 franky zhecka:USB Audio S / N:140210000BB2デタッチ
 5月15日09:17:56フランキーカーネル:uaudio0:uhub7、ポート2、アドレス6(切断)
 5月15日09:17:56 franky zhecka:USB Audio S / N:140210000BB2デタッチ
 5月15日09:17:56 franky zhecka:uaudio0のdspシンボリックリンクの削除
 5月15日09:23:36 franky zhecka:uaudio0でpcm6が見つかりました。 保存中。
 5月15日09:23:36フランキーカーネル:uaudio0:<vendor 0x041e product 0x30d3、class 0/0、rev 1.10 / 1.00、addr 6> on usbus5
 5月15日09:23:36フランキーカーネル:uaudio0:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:再生:48000 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:再生:44100 Hz、2 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:レコード:48000 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:記録:44100 Hz、1 ch、16ビットS-LE PCM形式、2x8msバッファー。
 5月15日09:23:36フランキーカーネル:uaudio0:MIDIシーケンサーなし。
 5月15日09:23:36フランキーカーネル:pcm6:uaudio0の<USBオーディオ>
 5月15日09:23:36フランキーカーネル:uaudio0:HIDボリュームキーが見つかりました。
 5月15日09:23:36 franky zhecka:USB Audio S / N:140210000BB2が添付されています
 5月15日09:23:38 franky zhecka:USBオーディオS / N:131014000129分離
 5月15日09:23:38フランキーカーネル:uaudio1:uhub7、ポート4、アドレス7(切断)
 5月15日09:23:38 franky zhecka:USBオーディオS / N:131014000129分離
 5月15日09:23:38 franky zhecka:uaudio1のdspシンボリックリンクの削除




カードを見つけました。 今、この幸せをすべて再現する番です。

Playlist.xspfを作成します。

 <?xml version = "1.0" encoding = "UTF-8"?>
 <プレイリストバージョン= "1" xmlns = "http://xspf.org/ns/0/" xmlns:vlc = "http://www.videolan.org/vlc/playlist/ns/0/">
         <title> AudioStreams </ title>
         <trackList>
                 <トラック>
                         <title> TV 1 </ title>
                         <location> udp://@239.1.1.1:5001 </ location>
                         <拡張アプリケーション= "http://www.videolan.org/vlc/playlist/0">
                                 <vlc:id> 1 </ vlc:id>
                                 <vlc:option> input-repeat = -1 </ vlc:option>
                         </拡張子>
                 </ track>
                 <トラック>
                         <title> TV 2 </ title>
                         <location> udp://@239.1.1.2:5001 </ location>
                         <拡張アプリケーション= "http://www.videolan.org/vlc/playlist/0">
                                 <vlc:id> 2 </ vlc:id>
                                 <vlc:option> input-repeat = -1 </ vlc:option>
                         </拡張子>
                 </ track>
                 <トラック>
                         <title> TV 3 </ title>
                         <location> udp://@239.1.1.3:5001 </ location>
                         <拡張アプリケーション= "http://www.videolan.org/vlc/playlist/0">
                                 <vlc:id> 3 </ vlc:id>
                                 <vlc:option> input-repeat = -1 </ vlc:option>
                         </拡張子>
                 </ track>
         </ trackList>
 </ playlist>




lua vlcツリーを/ usr / local / www / vlc_httpにコピーします

プレイリストを/usr/local/www/vlc_http/playlists/Playlist.xspfに配置します



次の設定でcvlcバンドルを実行します:

 vlc -vvv --sout-transcode-venc none --network-caching 50 --sout-mux-caching 50 -Aoss --oss-audio-device = / dev / uaudio.serial.131014000129 -I http --http- src = / usr / local / www / vlc_http --http-host = 192.168.5.2 --http-port = 8101 --http-password = mypass1 /usr/local/www/vlc_http/playlists/Playlist.xspf
 vlc -vvv --sout-transcode-venc none --network-caching 50 --sout-mux-caching 50 -Aoss --oss-audio-device = / dev / uaudio.serial.140210000BB2 -I http --http- src = / usr / local / www / vlc_http --http-host = 192.168.5.2 --http-port = 8102 --http-password = mypass1 /usr/local/www/vlc_http/playlists/Playlist.xspf




次に、それは小さいです。 VLCコントロールhttpから例を取り、コントロールページを作成します。 幸いなことに、しっかりしたjqueryとjavascriptがあります。

Webサーバーのメインツリーでページを形成し、iframeで各ストリームプレーヤーのコントロールを統合し、電話またはタブレットでこのビジネスを開きます。 他のすべての制御ロジックはhtmlで記述されており、それほど難しくありません。

なぜなら 私たちは音源に縛られておらず、サウンドストリームの管理に大きな柔軟性をもたらします。 メディアサーバーからすべてのスピーカーに同じストリームを出力したり、ストリームを交換したりできます。



USBオーディオカードに戻りますが、プレーヤー、電話、マイクなどの物理デバイスからサウンドを送信できるマイク入力がまだあります。 プレーヤーからのライン出力をマイク入力に接続するには、簡単な分圧器を組み立てる必要があります。 ハブに関する記事が再び利用可能になりました。 マイク入力からの着信信号もストリームで開始され、ローカルホストまたはネットワークでブロードキャストされます。



そのようなもの。 質問があります-書き込み。








All Articles