WebRTC on Linux with Google Chrome is FAIL!
WebRTCからvideoへgetUserMediaから映像ストリームを流したかった、それもこれからやろうと思った事の序章として。
始めに私が陥ったミスは先のエントリーの通り。つまりopenSUSE-12.2のreposのChromium-24がvideo要素すらサポートしていない状態だった事。これはGoogle版のChromeを導入する事で解決した。確かにvideo要素は動き、YouTubeで素晴らしい音楽をvideoタグで鑑賞できた。
しかし、次の問題は唖然とせざるを得なかった。WebRTCの簡単なサンプルを書いた。
<!DOCTYPE html> <video id="v" autoplay controls > </video> <script> navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia ; console.log ( 'navigator.getUserMedia is ' + (navigator.getUserMedia ? '[OK]' : '[n/a]') ); window.URL = window.URL || window.webkitURL ; console.log ( 'window.URL is ' + (window.URL ? '[OK]' : '[n/a]') ); navigator.getUserMedia ( { video : true , toString: function() { return 'video'; } } , function(s) { var v = document.getElementById('v') v.src = window.URL.createObjectURL ? window.URL.createObjectURL(s) : s; console.log('begin video stream'); } , function(e) { console.log('[ERROR] ' + e); } ); </script>
しかし上手く動作しない。開発者ツールのコンソールにもエラーは出ていない。chrome://flags/についてもChrome23ではWebRTCについて必要なフラグは最早無くなって居る(Chrome21からgetUserMediaに関するフラグは必要無い)。
それどころか、ウェブ上に存在するWebRTCから映像ストリームを取得する誰かしらのデモすらも動作しない。例えば、
などだ。
さて、こうなるとそろそろ疑うべきは…「ChromeのWebRTCの映像ストリーム機能はLinux向けにまともに実装されているのか?」だ。
結論を見せよう。
% google-chrome ... [112:114:1202/011047:ERROR:capture_video_decoder.cc(64)] Not implemented reached in virtual void CaptureVideoDecoder::OnStarted(media::VideoCapture*)
ChromiumはLinuxで実行された時、標準出力、標準エラー出力をコンソールに接続される。どう見てもChromiumのC++ソースコードレベルで未実装だ。Linux向けの特殊化が実装されていない。なんという事だ…。