LoginSignup
13
5

More than 5 years have passed since last update.

SkyWay IoT SDKで簡単に WebRTC サーバーサイドレコーディング作ってみる

Last updated at Posted at 2018-04-27

これは何?

SkyWay IoT SDK 使うと、WebRTC を経由したサーバーサイドレコーディングが割に簡単にできちゃうんで、それの紹介

image.png

sendStream() - ブラウザから音声を送る

SiRu-Client の v0.0.9 から、 sendStream() というメソッドで、ブラウザから IoT SDKが搭載された Linux に手軽に音声を送れるようになりました。使い方は、以下の感じ。 getUserMedia で音声取得後、 sendStream(uuid, stream) を呼ぶことでターゲットの IoT SDK デバイスに送信できます。

const client = new SiRuClient( 'testroom', { key: 'YOUR_API_KEY' } );

client.on('meta', profile => {
  navigator.mediaDevices.getUserMedia({ audio: true, video: false })
    .then( stream =>
       client.sendStream( profile.uuid, stream )
    )
    .then( call => console.log('start sending local stream') )
    .catch( err => console.warn(err) );
});

サンプルサイト https://nttcom.github.io/skyway-siru-client/examples/sendAudio.html もありますので、そちらも参考に。

IoT SDK側でのファイル保存

SkyWay IoT SDK 1 では、受信した音声をデフォルトで localhost:25000/udp あてに rtp で流し続けます(フォーマットはデフォルトだと opus に固定しています)。

なので、これを gstreamer で拾えばファイル保存できちゃう。以下の例だと opus で一旦受信した後 wav に変換して保存しています。

gst-launch-1.0 -v udpsrc port=25000 caps="application/x-rtp,media=(string)audio,clock-rate=(int)48000,encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00 " ! \
  rtpopusdepay ! \
  opusdec ! \
  wavenc ! \
  filesink location=recorded_audio.wav

受け側でそのまま再生する

保存できるんだったら、そのままリモートのスピーカーでも再生できるよね。。。。ってことで、それをやる gstreamer のスクリプトが以下

gst-launch-1.0 -v udpsrc port=25000 caps="application/x-rtp,media=(string)audio,clock-rate=(int)48000,encoding-name=(string)X-GST-OPUS-DRAFT-SPITTKA-00 " ! \
  rtpopusdepay ! \
  opusdec ! \
  audioconvert ! \
  audioresample ! \
  autoaudiosink

それ以外には?

上の二つのパイプラインスクリプトをよく見ると分かるのですが、ようは opusdec 以下のパイプラインの書き方次第で、音声処理を自由に操作できます。この辺になると、正直 IoT SDK というより、gstreamer をいかに使いこなすかという話になりますが、可能性はたくさん。

今回紹介したのは、単純な録音と再生ですが、例えば appsink 2 と組み合わせてあげたりすると生の音声データとして取得できちゃうんで、それに音声認識かましたあと自然言語処理をかまして通話内容の統計解析を行なう・・・なんてなことも可能になります3。きっと

ちなみに今回は 録音 というところにフィーチャーして、受信側の話をしましたが、IoT SDK では、送信ストリームも gstreamer なりを使って rtp で渡す形になるので、ここの柔軟性は送信ストリームにもあてはめられます。例えば、カメラ映像に対して、顔認識とかAI/ML系をかましつつ、WebRTC配信するとか。4

まぁ、この辺については、またおいおい


  1. SkyWay IoT SDKのインストール&動かし方は、以前の記事 を参照 

  2. https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-appsink.html 

  3. このレベルになると、 c でのコーディングの話とかになってきますが、 node-gstreamer-superficial みたいに node 版の wrapper なんかもあるんで、以外に気軽にできたりします。 

  4. SkyWay IoT SDKは現状βリリースの実験的なものですので、その点はご注意を 

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5