SkyBeje開発記

SkyWayを使ったブラウザ間通信アプリを開発しています

SkyWayでSDPを覗いて対応Codecを確認してみました。

先日書いた記事の追記になります。

 


端末毎のCodecの確認方法について
SDPで判断できます。という情報をTwitterで頂きました。

SDP自体は何となく聞いた事があったので、なるほどと思い、早速確認してみようと思ったのですが、skyway.js の APIリファレンスを確認してもSDPが確認できそうな関数が見当りません。

JavaScript SDK APIリファレンス - SkyWay - Enterprise Cloud WebRTC Platform


ただ skyway.js を確認してみると「offer」や「sdp」のワードで大量にヒットします。
10,000行を超えるスクリプトなので、ちょっと見てすぐに理解できる代物では無さそうなのですが、とりあえず offerMessage や answerMessage を覗くと SDPを確認できる事がわかりました。

 

スクリプトのどの箇所のSDP確認するのが最適なのか判断できなかったのですが
以下の2箇所にコンソール出力処理を追加して確認してみました。

skyway.js(ver 1.0.1)の、Connectionクラス内(1,788行付近)

console.info("Connection HandleAnswer");
console.info(answerMessage.answer.sdp); 

 

skyway.js(ver 1.0.1)のMeshRoomクラス内(16,840行付近)


console
.info("MeshRoom offerMessage");
console.info(offerMessage.offer.sdp);


※作ったサービスはMeshRoomを使っている為、上記の箇所で確認しましたが
 SFURoomやPeerで直接の場合だと、別の箇所で確認する必要があると思います。

ビデオ通話が可能なケースのSDPを確認

PC側 Chrome / Mobile側 Nexus9
※DevToolsでMobile側のConsoleログを確認しています。

Mobile(Nexus9)側で確認したログ (MeshRoom OfferMessageのSDP)
VP8 / VP9 / H264 の表記あり。Chromeの対応Codecが表示されていると思われます。

f:id:iwatendo:20171122163617p:plain


PC側(Chrome)で確認したログ(Connection HandleAnserのSDP)
VP8 / VP9 の表記あり。Nexus9の対応Codecが表示されていると思われます。

f:id:iwatendo:20171122163626p:plain

 

ビデオ通話ができないケースのSDPを確認

PC側 Sfari / Mobile側 Nexus9

Mobile側で確認したログ (MeshRoom OfferMessageのSDP)
H264の表記のみ。Safariの対応Codecが表示されていると思われます。

f:id:iwatendo:20171122165128p:plain

同時に skyway からエラーメッセージの出力されていました。

PC側(Safari)側では、Video/AudioのSDPメッセージ出力はされていませんでした。

結論

 SDPの読み方は理解していないのですが、予想どおりSafariはH264のみ対応だけれども、Nexus9はH264に対応していないため動作しないという事で合ってそうです。

 上記のような感じでSkyWayでもSDPは確認できるようですが、プログラムから対応Codecを判定する為には skyway.js の改造が必要になりそうです。
 skyway.jsはオープンソースなので、きっちり改造してプルリクを出してみたりしても良いのかもしれません。(私はそこまでやれるスキルと自信が無いですが)

 とりあえず、未対応Codecの場合はエラーが発生するようなので、skywayのエラーを拾えるようであれば拾って、未対応端末と表示する方針にしようかなと思っています。

最後に

 SafariのWebRTCがH264にしか対応しないと聞いたときは、よく分かってなかったのですが、色々とやっかいですね。

 現状だと、iOS端末とAndroid端末で、モバイル端末のブラウザ間でビデオ通話する場合は、Android端末がH264に対応している必要がありますが、AndroidはブラウザではH264に対応できない端末が多いらしいです。

 私はスマホアプリの開発経験がなかったりするのですが、スマホ対応は色々考えることが多く、更には機種差分もあったりして難しいですね。色々と全部ブラウザだけで実現できたら良いのですが、現状なかなかそうもいかないようです。


何か気になる点等がありましたら、コメントかTwitterの方に書いて頂ければ嬉しいです。