ios - 在 Ionic 3.9.2 IOS 版本中实现 RTCMultiConnection(流音频)的问题
问题描述
我在 Ionic 3.9.2 中实现 RTCMultiConnection(流音频)时遇到问题。与一切正常的 Android 版本不同,IOS 应用程序仅以一种方式工作 - 当用户连接到现有的流应用程序时,它会从它接收音频声音。如果用户启动新流,则没有任何工作,甚至缺少要求麦克风权限的弹出窗口。终端不显示任何错误。你们中有人遇到过这样的问题吗?
我还实现了这个插件 https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc/blob/master/docs/Building.md
[索引.html]
<body>
<script src="https://rtcmulticonnection.herokuapp.com/dist/RTCMultiConnection.min.js"></script>
<script src="https://rtcmulticonnection.herokuapp.com/socket.io/socket.io.js"></script>
<script>
document.addEventListener("deviceready", function() {
if ((typeof device !== "undefined") && device.platform == 'iOS'){
cordova.plugins.iosrtc.registerGlobals();
}
}, false);
</script>
</body>
[主页.ts]
constructor(public navCtrl: NavController, private platform: Platform) {
}
clickBtn(){
this.requestPermissions().then(() => {
this.createConnection();
});
}
createConnection() {
const RTCMultiConnection = window['RTCMultiConnection'];
const connection = new RTCMultiConnection();
connection.socketURL = 'https://apilink:9001/';
connection.socketMessageEvent = 'RTC-audio';
connection.session = {audio: true, video: false, oneway: true};
connection.bandwidth = {audio: 64};
connection.sdpConstraints.mandatory = {OfferToReceiveAudio: true,OfferToReceiveVideo: false};
connection.iceServers.push({
urls: 'turn:217.182.77.219:3478',
credential: 'credential_password',
username: 'rtc_username'
});
connection.onPeerStateChanged = this.onPeerStateChanged;
connection.onleave = this.onleave;
connection.onstream = this.onstream;
connection.onstreamended = this.onstreamended;
connection.onRoomFull = this.onRoomFull;
connection.onMediaError = this.onMediaError;
connection.openOrJoin('Channel12345');
}
onPeerStateChanged = event => {
console.log('onPeerStateChanged', event);
}
onleave = event => {
console.log('onleave', event);
}
onstream = event => {
console.log('onstream', event);
}
onstreamended = event => {
console.log('onstreamended', event);
}
onRoomFull = event => {
console.log('onRoomFull', event);
}
onMediaError = event => {
console.log('onMediaError', event);
}
requestPermissions() {
if(!this.platform.is('cordova'))
return Promise.reject('not cordova');
if (this.platform.is('android')) {
return this.requestAndroidPermissions();
}
else if (this.platform.is('ios')) {
console.log("PLATFORM IOS")
return Promise.resolve(true)
}
}
requestAndroidPermissions() {
return new Promise((resolve, reject) => {
const {permissions} = window['cordova'].plugins;
permissions.requestPermissions([
permissions.CAMERA,
permissions.MICROPHONE,
permissions.MODIFY_AUDIO_SETTINGS,
permissions.RECORD_AUDIO,
permissions.ACCESS_NETWORK_STATE,
permissions.ACCESS_WIFI_STATE
],
ok => resolve(ok),
error => reject(error)
);
})
}
}
配置文件
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="*" />
<allow-intent href="itms-apps:*" />
<hook src="hooks/iosrtc-swift-support.js" type="after_platform_add" />
<preference name="ios-XCBuildConfiguration-ENABLE_BITCODE" value="NO" />
<config-file parent="NSMicrophoneUsageDescription" target="*-Info.plist">
<string>App uses your microphone to make calls.</string>
</config-file>
<config-file parent="NSCameraUsageDescription" target="*-Info.plist">
<string>App uses your camera to make video calls.</string>
</config-file>
...
</platform>
我想添加在 IOS 上启动新流的功能,因为现在它不起作用。
解决方案
推荐阅读
- javascript - 想通过在一行的 td 中添加事件监听器来调用 javascript 函数
- c++ - 使用 Tensorflow Lite C,数字分类器
- sql - CTE获取每个父母的所有孩子和嵌套孩子
- javascript - 是否可以在 nuxt static 中启用 gzip 压缩?
- npm - 如何在 m1 上使用 chromedriver err 解决 npm install
- linux - 使用 linux command/srcipting 在 HTML 的特定单词之后提取单词
- telegram-bot - CallbackQueryHandler 或 ConversationHandler 用于从机器人类发送的消息
- html - Angular如何遍历组件类文件数组并渲染它们的模板
- c# - 使用具有指定列的 OpenXml 在 Excel 中插入新行
- python - 如何仅在scrapy spider中每个http请求成功后才执行方法?