Проблема с реализацией RTCMultiConnection (stream Audio) в Ionic 3.9.2 IOS версии - PullRequest
1 голос
/ 03 апреля 2019

У меня проблема с реализацией RTCMultiConnection (stream Audio) в Ionic 3.9.2. В отличие от версии Android, где все работает нормально, приложение IOS работает только одним способом - когда пользователь подключается к существующему потоковому приложению, получает от него звуковые звуки. Если пользователь запускает новый поток, ничего не работает, даже всплывающее окно с запросом разрешений на микрофон отсутствует. Терминал не отображает никаких ошибок. Кто-нибудь из вас сталкивался с такой проблемой?

Я также реализовал этот плагин https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc/blob/master/docs/Building.md

[index.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>

[home.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)
      );
    })
  }
}

config.xml

   <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, потому что теперь он не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...