EMONシステム: コマンドパイプラインによる マルチメディアストリーム処理 笠松健一 京都大学工学部 藤川賢治 京都大学情報学研究科 岡部寿男 京都大学情報学研究科 古村隆明 京都高度技術研究所 平成14年3月14日
研究の背景と目的 インターネットでマルチメディア伝送を個人でもできる 電話やビデオ放送のソフトウェアが急速に普及 デジタル家電やAV機器を対象とするネットワーク技術の研究 独自方式→IPへ統合の方向 例えばIPスピーカ、IPマイクの登場 このようなネットワーク環境の変化に既存のソフトウェアでは各ソフトウェア毎に逐一対応する必要 再利用性の高い部品を組み合わせることにより処理を行うシステムを提案
関連研究 (マイクロソフト社製の インターネットを利用するアプリケーション) 関連研究 (マイクロソフト社製の インターネットを利用するアプリケーション) 電話アプリケーションNetMeeting 音声録音機能 音声再生機能 音声ストリームのネットワーク伝送機能 放送アプリケーションMediaEncoder
関連研究 (マイクロソフト社製の インターネットを利用するアプリケーション) 関連研究 (マイクロソフト社製の インターネットを利用するアプリケーション) NetMeetingで伝送する音声をMediaEncoderで放送することはできない 機能は十分に有る 実現にはプログラミング言語の知識が必要 HostA HostB NetMeeting NetMeeting MediaEncoder 電話機能 電話機能 放送機能
提案するシステム コマンドパイプラインにより処理 UNIXにはパイプでプログラムを連携し、 様々な処理を行う考え方が存在 →マルチメディアストリーム処理に適用 機能毎にプログラムを実装し、パイプで連携 パイプラインの例 $ audiocapt | udpsend 10.0.0.1 Audiorecord と udpsend マイクで音声を取り込む データを10.0.0.1へ送信 →マイクで取り込んだ音声を10.0.0.1へ送信
提案するシステムの設計と実装 実装したプログラムと接続関係 rtpenc RTPヘッダを 付加 udpsend UDP/IPで送信 audiocapt 音声を録音 fecenc 前方誤り訂正 の符号を付加 jpegcapt 映像の取込み ntspcall 電話の発信 パイプによる接続 IPネットワーク ソケットによる接続 ntspwait 電話の着信 jpegplay 映像を表示 fecdec 前方誤り訂正 を行う rtpdec RTPヘッダを 削除 udprecv UDP/IPで受信 audioplay 音声を再生
実現したアプリケーションの例 ビデオオンデマンド HostA jpegcapt 映像の取込み fecenc 前方誤り訂正 の符号を付加 rtpenc RTPヘッダを付加 udpsend UDP/IPで送信 video.jpgs HostA$ jpegcapt | fecenc | rtpenc >video.jpgs IP ネットワーク HostA$ udpsend 10.0.0.2< video.jpgs udprecv UDP/IPで受信 rtpdec RTPヘッダを 削除 fecdec 前方誤り訂正 を行う jpegplay 映像を表示 HostB$ udprecv | rtpdec | fecdec | jpegplay 図と、コマンドライン=> アニメーションで押す。 RTPは無し。FECは有り。 HostB:10.0.0.2
実現したアプリケーションの例 実時間放送 HostA$ jpegcapt | fecenc | rtpenc 映像の取込み fecenc 前方誤り訂正 の符号を付加 rtpenc RTPヘッダを付加 udpsend UDP/IPで送信 HostA$ jpegcapt | fecenc | rtpenc | udpsend 10.0.0.2 IP ネットワーク udprecv UDP/IPで受信 rtpdec RTPヘッダを 削除 fecdec 前方誤り訂正 を行う jpegplay 映像を表示 HostB$ udprecv | rtpdec | fecdec | jpegplay エー、10.0.0.1 のところをブロードキャストあるいはマルチキャストアドレスにすると ブロードキャストおよびマルチキャストで送信することができます。 HostB:10.0.0.2
リードソロモン符号による 前方誤り訂正 n 個中の任意の n-k 個以下のパケットロス時に データの訂正が可能 k n FECで付加される パケット (FECパケット) n-k n Reed Solomon 符号 Header 元データのパケット (メディアパケット) k n 個中の任意の n-k 個以下のパケットロス時に データの訂正が可能
実現したアプリケーションの例 前方誤り訂正を行うリレー 受信ホスト リレーホスト 送信ホスト リレーホスト 受信ホスト リレーホスト 受信ホスト fecencがFECパケットの生成 fecdecがメディアパケットの回復 送信ホストから受信ホストまで伝送する途中で 前方誤り訂正を行うリレー relay$ udprecv | rtpdec | fecdec | fecenc | rtpenc | udpsend
実現したアプリケーションの例 電話 HostA audioplay 音声を再生 rtpdec RTPヘッダを削除 audiocapt 音声を録音 rtpenc RTPヘッダを付加 ntspcall 電話の発信 IPネットワーク audioplay 音声を再生 rtpdec RTPヘッダを削除 ntspwait 電話の着信 audiocapt 音声を録音 rtpenc RTPヘッダを付加 HostB:10.0.0.2 HostA$ ntspcall 10.0.0.2 “rtpdec | audioplay” “audiocapt | rtpenc” HostB$ ntspwait 10.0.0.2 “rtpdec | audioplay” “audiocapt | rtpenc”
既存のプログラムと連携 SSH ホストBでマイクから取り込んだ音声ストリームをホストAへ暗号化して伝送し、ホストAで再生する HostA$ ssh 10.0.0.2 audiocapt | audioplay
既存のプログラムと連携 tee teeを用いると、プログラムの出力をプログラムや ファイルへ複数同時に出力することができる HostAでカメラから映像を取込み、ファイルに保存しながら放送 HostA$ jpegcapt | tee save.jpgs | rtpenc | udpsend 225.0.0.1
同期再生 映像とそれに同期する音声について考える 映像を取り込むホストと音声を取り込むホストが異なる場合や、再生を行うホストが異なる場合に 同期再生を行う機能の実現 ホスト間で時計の情報と再生バッファーの状況の共有 NTPを用いてホストの時計を同期することにより 映像と音声を異なるホストで再生する機能を実装
複数ホストによる 同期再生機能の実装 NTPで同期しているホストの時計を元にタイムスタンプを付加 音声送信ホスト 音声受信ホスト NTPサーバ audiocapt 音声を録音 audioplay 音声を再生 IPネットワーク 映像送信ホスト 映像受信ホスト jpegcapt 映像の取込み jpegplay 映像の再生 映像 + 映像というのも可能 NTPで同期しているホストの時計を元にタイムスタンプを付加 再生時刻はタイムスタンプの時刻+あらかじめ定めた時間
まとめと今後の課題 まとめ 今後の課題 実装したシステムの情報 機能毎に実装したプログラムをパイプで連携し、さまざまな処理を行うシステムを提案 提案するシステムの設計と実装 IPネットワークを利用した様々な処理を実現 今後の課題 音声ミキサーなどの機能を追加 実装したシステムの情報 http://www.ibcast.net/
実現したアプリケーションの例 IPマイクによる電話 HostA:10.0.0.1 audioplay 音声を再生 rtpdec RTPヘッダを削除 udprecv RTPヘッダを付加 ntspcall 電話の発信 IPネットワーク マイクを別のホストにした例ですが、スピーカについても同様に別のホストにできます。 このとき rtpdec をudpsend と置き換えてスピーカのあるホストに伝送するのですが、 具体的な利用方法としては 電話の呼び出しのときは電話の端末から離れたスピーカに 呼び出し音を鳴らすようにするといったものがあります。 audiocapt 音声を録音 rtpenc RTPヘッダを付加 udpsend UDP/IPで送信 HostM HostA$ ntspcall 10.0.0.2 “rtpdec | audioplay” “udprecv 10.0.0.1” HostM$ audiocapt | rtpenc | udpsend 10.0.0.1