🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

ChromeのMediaStreamTrackとvideo要素の組合せには罠がある話

WebRTC界隈で、

  • Chromeの`video.srcObject = stream`はバグってるから使っちゃダメ
  • 代わりに`video.src = URL.createObjectURL(stream)`を使え

という噂があって。

とはいっても、

などなど事情もあるのでそろそろ`srcObject`だけ使いたい!
そのためにもどういうケースでバグってるとか、この噂の真意を確かめたいなーと思って調べてたのが事の発端。

続きを読む

Safari TPのWebRTCでaddTransceiver('audio').setDirection('recvonly')するとMediaStreamがautoplayされない問題

タイトルに収まらんw

SafariのWebRTCは新しめの仕様なので、`createOffer()`にオプションを渡して`recvonly`にする方法が使えない。

pc.createOffer({
  offerToReceiveAudio: true,
  offerToReceiveVideo: true,
})

こういうやつ。

なので、代わりに、

pc.addTransceiver('audio').setDirection('recvonly');
pc.addTransceiver('video').setDirection('recvonly');

// からの
pc.createOffer();

とする必要がある。
だがしかし、こうやって開始したP2Pで相手のストリームを受け取ると、`video`に`autoplay`を指定していても再生が開始されないという謎の挙動を踏みましたというメモです。

しかもSafariどうしでは再現しなくて、片側はChromeFirefoxの時だけっていう・・。

確認バージョン

続きを読む

Flowでコンストラクタをエクスポートするモジュールの型を定義する

こういうやつ。

import EventEmitter from 'events';

const ee = new EventEmitter(); // <- コレ

これはあくまで例で、Node標準の`events`のEventEmitterなら、Flowがビルトインで型情報を持ってるので困りません。
でも似たようなのを自分で書いたり、他のライブラリに型をつける場合に必要になるはず。

続きを読む