web-k / tiramisu

WebSocket(Pusher)を使ったチャット&囲碁Railsアプリ
https://trms.herokuapp.com
1 stars 2 forks source link

カメラマイクなしでもビデオチャットに参加できる #132

Open ntth opened 10 years ago

ntth commented 10 years ago

参加だけ

toshi3221 commented 10 years ago

8d6aa6ed1824753cb2b587ba476b2759f6ed0131 にてボタン押下でビデオチャットが始まるように変更した。

試行錯誤したが、現状のwebrtc.ioの仕組みでは実現困難。 ビデオチャットを開始するという部分が全てラッピングされているため、 自分のカメラ/マイクを登録して初めて相手のストリーム追加イベントが来る。 既に相手がビデオチャットチャンネルに入っている場合、カメラマイク無しだと、こちらから何もトリガーが無いため、P2Pコネクションをはる事が困難。

もし、どうしても実現したいとなると、getUserMediaやシグナリングレベルで制御する必要がある為、webrtc.io.jsに結構な修正か、Peer.js等に乗り換えて再構築する必要がありそう。

toshi3221 commented 10 years ago

今回、ボタン押下で始めるようにしたので、音声のみで開始はボタン作ればvideo: falseにして開始すれば良いだけになったはずなので #128 は簡単に対応可能な状態にはなった

toshi3221 commented 10 years ago

PeerJSは更新も頻繁で将来性ありそうなので調べてみた

http://peerjs.com/docs/

結果は、webrtc.ioと同様に、相手からMediaStreamが渡されてきて、その際に自分のローカルストリームを渡す事で接続確定することになっている模様:

Start call

// Call a peer, providing our mediaStream
var call = peer.call('dest-peer-id', mediaStream);

Answer call

peer.on('call', function(call) {
  // Answer the call, providing our mediaStream
  call.answer(mediaStream);
});

どうもWebRTCはP2Pのコネクションは上り/下りのストリームを必ず確定する必要があるみたい。 とりあえずは音声のみ #128 を実現して、そのあとは、サーバサイドで映像をマージして配信のようなもの凄く大きいハードルとなるようだ。

というわけで、このIssueは遠い未来に飛ばす

toshi3221 commented 10 years ago

138 によってPeerJSに乗り換えはpull-req反映待つのみ。

MediaStreamオブジェクトを取得する事が出来るようになったので、以下を参考にMediaStream Recordingをキーワードにサーバーサイドにデータを細分化して送り込むことができそう: http://stackoverflow.com/questions/13431251/html5-solution-to-upload-a-webcam-camera-video-stream-to-server#new-answer?newreg=424fed0598a1457b96c01df64b0f9ff5

サーバー側は送られて来たデータをいかに他のユーザーに配信するかというところ。Apacheでストリーミング配信するモジュールとか、HTTPライブストリーミングとか、なにやらキーワードは出てくるが、結局どれがマッチするかまでは判断出来ず。