WebRTC와 WebView의 조합에 대해
WebRTC와 WebView의 조합에 대해
Android/iOS 모두 WebView에서 WebRTC의 영상을 수신할 수 있는지 검증해 보았습니다.
WebRTC 배포 기반에는 아고라. 이오을 사용합니다.
전제
이번 검증에 대해서는 WebView측으로부터의 영상 송신은 시도하지 않습니다.
getUserMedia() 근처가 제대로 작동하지 않는다는 기사를 몇 가지 보이고 있기 때문입니다.
(혹시 움직이고 있을지도 모릅니다만)
agora.io의 작동 상태는 아래에 문서가 있습니다.
htps : // / cs. 아고라. 이오 / 엔 / 후 qs / ぇ b_ 온_ 모비
환경
게재 측 브라우저 : 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에 대한 구현에 특별한 어려움은 없었습니다.
웹 어플리케이션측의 수정을 곧바로 반영시키기 위해 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);
}
결과 화면
특히 문제없이 작동합니다.
iOS 구현
샘플 코드는 이쪽
처음에는 WKWebView를 사용하여 시도했습니다.
'iOS', 'WebView'로 검색하면 자주 히트합니다.
결과적으로 이 WKWebView에서는 영상을 시청할 수 없었습니다.
(할 방법은 있을지도 모르지만...)
ViewController.swiftlet 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)
}
}
이 코드에서 안전하게 작동했습니다.
결과 화면
"SFSafariViewController는 iOS9.0부터 사용할 수 있으며 Safari의 표준 기능을 갖춘 ViewController를 만들 수 있습니다."
마지막으로
실제로 제품으로 이용하기에는 다른 문제가 있을지도 모르지만, 일단 WebView에서의 영상 재생은 가능하다는 것을 알았습니다.
agora.io에 관한 문의는 이쪽으로부터
Reference
이 문제에 관하여(WebRTC와 WebView의 조합에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/v-cube/items/09cf8d59b7a8e7821b89
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 검증에 대해서는 WebView측으로부터의 영상 송신은 시도하지 않습니다.
getUserMedia() 근처가 제대로 작동하지 않는다는 기사를 몇 가지 보이고 있기 때문입니다.
(혹시 움직이고 있을지도 모릅니다만)
agora.io의 작동 상태는 아래에 문서가 있습니다.
htps : // / cs. 아고라. 이오 / 엔 / 후 qs / ぇ b_ 온_ 모비
환경
게재 측 브라우저 : 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에 대한 구현에 특별한 어려움은 없었습니다.
웹 어플리케이션측의 수정을 곧바로 반영시키기 위해 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);
}
결과 화면
특히 문제없이 작동합니다.
iOS 구현
샘플 코드는 이쪽
처음에는 WKWebView를 사용하여 시도했습니다.
'iOS', 'WebView'로 검색하면 자주 히트합니다.
결과적으로 이 WKWebView에서는 영상을 시청할 수 없었습니다.
(할 방법은 있을지도 모르지만...)
ViewController.swiftlet 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)
}
}
이 코드에서 안전하게 작동했습니다.
결과 화면
"SFSafariViewController는 iOS9.0부터 사용할 수 있으며 Safari의 표준 기능을 갖춘 ViewController를 만들 수 있습니다."
마지막으로
실제로 제품으로 이용하기에는 다른 문제가 있을지도 모르지만, 일단 WebView에서의 영상 재생은 가능하다는 것을 알았습니다.
agora.io에 관한 문의는 이쪽으로부터
Reference
이 문제에 관하여(WebRTC와 WebView의 조합에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/v-cube/items/09cf8d59b7a8e7821b89
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
전송 측, 수신 측 모두 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에 대한 구현에 특별한 어려움은 없었습니다.
웹 어플리케이션측의 수정을 곧바로 반영시키기 위해 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);
}
결과 화면
특히 문제없이 작동합니다.
iOS 구현
샘플 코드는 이쪽
처음에는 WKWebView를 사용하여 시도했습니다.
'iOS', 'WebView'로 검색하면 자주 히트합니다.
결과적으로 이 WKWebView에서는 영상을 시청할 수 없었습니다.
(할 방법은 있을지도 모르지만...)
ViewController.swiftlet 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)
}
}
이 코드에서 안전하게 작동했습니다.
결과 화면
"SFSafariViewController는 iOS9.0부터 사용할 수 있으며 Safari의 표준 기능을 갖춘 ViewController를 만들 수 있습니다."
마지막으로
실제로 제품으로 이용하기에는 다른 문제가 있을지도 모르지만, 일단 WebView에서의 영상 재생은 가능하다는 것을 알았습니다.
agora.io에 관한 문의는 이쪽으로부터
Reference
이 문제에 관하여(WebRTC와 WebView의 조합에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/v-cube/items/09cf8d59b7a8e7821b89
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@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);
}
샘플 코드는 이쪽
처음에는 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)
}
}
이 코드에서 안전하게 작동했습니다.
결과 화면
"SFSafariViewController는 iOS9.0부터 사용할 수 있으며 Safari의 표준 기능을 갖춘 ViewController를 만들 수 있습니다."
마지막으로
실제로 제품으로 이용하기에는 다른 문제가 있을지도 모르지만, 일단 WebView에서의 영상 재생은 가능하다는 것을 알았습니다.
agora.io에 관한 문의는 이쪽으로부터
Reference
이 문제에 관하여(WebRTC와 WebView의 조합에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/v-cube/items/09cf8d59b7a8e7821b89텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)