03-6845-0775平日10:00〜18:00受付
無料ガイド
お問い合わせ
資料請求

2022年05月10日

WebRTCとWebViewの組み合わせについて

※2020年の記事です。

 

Android/iOS共にWebViewでWebRTCの映像が受信できるか検証してみました。
WebRTCの配信基盤にはagora.ioを利用します。

お役立ち資料ダウンロード

オンライン体験におけるブイキューブの技術サポートのご案内

【図解】システム開発のお手伝い

ブイキューブのソリューションアーキテクトが、寄り添います!
各種ライブ配信システムのアーキテクチャについて わかりやすい構成図にてご紹介!

無料ダウンロード

前提

今回の検証についてはWebView側からの映像送信は試しません。
getUserMedia()あたりが正常に動作しないとの記事をいくつか見かけている為です。
(もしかしたら動いているかもしれませんが)
agora.ioでの動作状況については以下にドキュメントがあります。

環境

配信側ブラウザ:Chrome76.0.3809.132
視聴側デバイス:
・Huawei P20 lite/Android9.0
・Xperia Z5 Premium/Android5.1
・iPhone7/iOS12.4.1
SDK:agora.io WebSDK2.8.0

WebRTCの実装

配信側、受信側共にagora.ioのWebSDKを利用しています。

host.html:配信側
audience.html:受信側(WebView側で指定するページ)

ポイントとしてはコーデックをVP8に指定しているところです。
廉価版のHUAWEI端末ではH264のデコードに対応していないもの(P20 lite等)がある為です。
尚、iOSのSafariは12.1からVP8対応しております。

host.html
  client = AgoraRTC.createClient({mode: 'live',codec:'vp8'});

Androidの実装

Androidについての実装については特に難しい点はありませんでした。
Webアプリケーション側の修正をすぐに反映させる為にsetCacheMode(WebSettings.LOAD_NO_CACHE);にてキャッシュを読み込まないようにする程度かと思います。

MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView  myWebView = (WebView)findViewById(R.id.webView1);

        myWebView.setWebViewClient(new WebViewClient());
        myWebView.setWebChromeClient(new WebChromeClient());
        myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

        myWebView.loadUrl("URL");//URLはaudience.htmlを指定

        myWebView.getSettings().setJavaScriptEnabled(true);

    }

結果画面

implementation-webview_01

特に問題なく動作しています。

iOSの実装

一番最初はWKWebViewを利用して試していました。
「iOS」「WebView」で検索するとよくヒットします。
結果としてはこのWKWebViewでは映像の視聴はできませんでした。
(やる方法はあるのかもしれませんが。。。)

ViewController.swift
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
let webView = WKWebView(frame: self.view.frame, configuration: config)

一応、javascriptは動いているようですが、映像が映りません。またalert()等も動作せず、少しデバッグがしにくい状況でした。
そこで、SFSafariViewControllerというものを見つけたのでこれで動作確認をしてみました。

ViewController.swift
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let url = URL(string:"URL")
        if let url = url{
            let vc = SFSafariViewController(url: url) //URLはaudience.htmlを指定
            present(vc, animated: true, completion: nil)
        }
    }

このコードで無事に動作しました。

結果画面

implementation-webview_02

「SFSafariViewControllerはiOS9.0以降使用可能でSafariの標準機能を備えたViewControllerを作成できます。」とのこと。

最後に

実際にプロダクトとして利用するには他の問題があるかもしれませんが、ひとまずWebViewでの映像再生は可能ということが分かりました。

ガイドブックダウンロード
ビデオ通話・ライブ配信API/SDK「Agora」

超低遅延API/SDK「Agora」ガイドブック

通話・配信遅延30-200ms!100万人の視聴対応!未経験者から専門家まで、誰でも読みやすいAgoraのガイドブックをダウンロードしませんか。

無料ダウンロード
ブイキューブ

執筆者ブイキューブ

Agoraの日本総代理店として、配信/通話SDKの提供だけでなく、導入支援から行い幅広いコミュニケーションサービスに携わっている。

関連記事

2025年05月30日

WebRTCの商用サービスまとめ|Agora, Amazon Chime, twilio, SkyWay, Live kit など

  • WebRTC
  • 基礎知識
(2025/5/30更新) オンライン会議やビデオ通話は、今やビジネスや個人のコミュニケーションに欠かせないツールとなりました。遠隔地にいる相手とも、まるでその場にいるかのようにリアルタイムで繋がれるこれらの体験は、私たちの働き方や暮らしを大きく変えています。 このようなリアルタイムコミュニケーションをWebブラウザ上で実現する中核技術がWebRTCです。特別なソフトウェアのインストールを必要とせず、Webサイトにアクセスするだけで利用できる手軽さが大きな特徴です。長年にわたり開発と仕様策定が進められてきましたが、2021年にはW3CとIETFによって正式に標準化されました。これにより、技術的な安定性やブラウザ間の互換性がさらに向上し、開発者はより安心してWebRTCを様々なサービスへ組み込めるようになりました。 現在、WebRTCはオンライン会議システム、ビデオ/音声通話サービス、ライブ配信プラットフォーム、オンライン教育、遠隔医療、さらにはライブコマース、オンラインゲーム、メタバース空間での交流といった多種多様なサービスで活用され、その重要性はますます高まっています。 この記事では上記のようなWebRTCを使って実現できることだけでなく、代表的なWebRTC用プラットフォームの商用サービスとそのメリットを含めてご紹介します。今後も様々なサービスで活用が進むWebRTCを知って、ぜひ自社のサービス開発にお役立てください。

先頭へ戻る