我目前正在开发一个使用flutter_webrtc包的应用程序.原来,当我调用WebRTC的getUserMedia方法为Blow时,并没有提示我判断摄像头权限,整个应用程序就卡住了.这种情况在Mac Safari以及iOS Chrome和Safari上都会发生.
var stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
_localStream = stream;
_localRenderer.srcObject = _localStream;
stream.getTracks().forEach((element) {
_peerConnection!.addTrack(element, stream);
});
此代码直接来自官方flutter_webrtc示例:https://github.com/flutter-webrtc/flutter-webrtc/blob/main/example/lib/src/get_user_media_sample.dart.我的flutter_webrtc软件包的版本是0.9.47,Mac safari软件包的版本是17.3,Dart SDK的版本是3.2.3,Flutter软件包的版本是3.16.5.
此外,我还从编译后的Javascript文件main.dart.js
中找到了以下代码片段.Flutter似乎调用了一个名为webkitGetUserMedia
的特定方法,它似乎适合Safari,但它就是不工作.可能是因为Apple的一些限制.
A.zu.prototype = {
WO(a, b, c) {
var s = new A.ay($.ah, t.xN),
r = new A.bF(s, t.Rt),
q = A.ar(["audio", b, "video", c], t.N, t.z),
p = !a.getUserMedia
p.toString
if (p)
a.getUserMedia = a.getUserMedia || a.webkitGetUserMedia || a.mozGetUserMedia || a.msGetUserMedia
this.a51(a, new A.W_([], []).li(q), new A.a86(r), new A.a87(r))
return s
},
a51(a, b, c, d) {
return a.getUserMedia(b, A.ji(c, 1), A.ji(d, 1))
}
}
我非常感谢任何知道这个问题的解决方案的人,这样getUserMedia就可以为iOS设备上的Ffltter Web App工作.