Вызывающий абонент не получает событие завершения вызова от получателя в opentok ios sdk

У меня есть приложение для iphone, в котором мне нужно управлять видеовызовом от вызывающего абонента к получателю, и оно отлично работает с использованием платформы Opentok. Видеозвонок и аудио все работает нормально. Но у меня проблема с завершением вызова со стороны получателя без ответа на вызов.

Если получатель принял вызов, а затем завершил вызов, то вызывающий абонент получает событие завершения вызова. Но когда получатель не принимает вызов из приложения и не завершает вызов напрямую, вызывающий абонент не получает никакого события, и он постоянно отображает экран вызова. Все делегаты и его методы реализованы.

Делегаты: OTSessionDelegate, OTSubscriberDelegate, OTPublisherDelegate. И все обязательные и необязательные методы реализованы и работают нормально.

объекты в заголовочном файле

#import <Opentok/Opentok.h>
@interface myViewController : UIViewController
{
      OTSession* session;
      OTPublisher* publisher;
      OTSubscriber* subscriber;
}

И я вызываю метод doUnpublish, чтобы завершить вызов. Код

- (void)doUnpublish
{

    [loaderviewView removeFromSuperview];
    [_session unpublish:_publisher];
    [_session disconnect];
    [player stop];
     [self doDisconnect];
 }


- (void)doDisconnect
{
   [callingView setHidden:YES];
   timer invalidate];
    [_session disconnect];
}

Он работает нормально, если получатель принимает вызов, а затем завершает вызов. Но если он не получает вызов и сразу завершается, то вызывающий не получает событие о том, что вызов завершен получателем.

Я не привожу дополнительный код, потому что он содержит код личных данных, которым я должен управлять для получения информации о звонках. И это не проблема и работает нормально. Мне просто нужно знать, как я могу получить событие на стороне вызывающего абонента, чтобы получатель завершил вызов, не приняв вызов.

Все мое приложение готово, и из-за этой ситуации я приостановлен. Любая помощь будет оценена.


person Max    schedule 14.08.2014    source источник
comment
Привет макс мне нужна твоя помощь. Я хочу реализовать видеосвязь с помощью opentok. Можете ли вы прислать мне код, который мне будет полезен.   -  person User558    schedule 18.11.2016
comment
@ Пользователь558. Как я могу отправить вам код? это большой проект, а не маленький код. Вы можете использовать демонстрационный проект opentok sdk, чтобы понять процесс. Вы можете задать вопрос, когда вы не понимаете или застряли на чем-то.   -  person Max    schedule 18.11.2016
comment
Я реализовал видеовызов, он работает нормально. как получить входящий звонок на другое устройство?   -  person User558    schedule 18.11.2016
comment
@ User558 Я работаю в компании, я не могу поделиться всем проектом. Я могу помочь, дав советы и предложения или небольшой код, но не могу поделиться всем кодом.   -  person Max    schedule 18.11.2016
comment
Мы сделали это через API, у нас есть общий идентификатор сеанса между обеими сторонами, затем они подключаются к одному и тому же сеансу и получают уведомления о событии sessionDidConnect и других действиях.   -  person Max    schedule 18.11.2016
comment
Давайте продолжим обсуждение в чате.   -  person Max    schedule 18.11.2016
comment
Как вам удалось уведомить получателя, когда дилер отключает вызов, прежде чем получатель его примет?   -  person khush    schedule 04.05.2020
comment
@khush, чтобы уведомить получателя, когда вызов поступает на стороне дилера, я подключаюсь к этому сеансу во время звонка и отключаю или завершаю этот сеанс, если вызов отклонен.   -  person Max    schedule 05.05.2020
comment
@Max, так разве он не отправил событие subscriberDidConnect на стороне дилера?   -  person khush    schedule 06.05.2020
comment
@khush, нет, просто создайте masterSession с этим идентификатором сеанса, но не вызывайте doSubscriber или doPublish до тех пор, пока не примете вызов, или не создавайте подписчика/издателя и отключите сеанс вызова, если вызов отклонен   -  person Max    schedule 06.05.2020
comment
@Max, как перестать звонить? какой-то конкретный кусок кода?   -  person khush    schedule 06.05.2020
comment
@khush Если вы используете callkit, то это зависит от системного режима, находится ли он в беззвучном режиме или звонит и т. д. Если вы используете настраиваемый входящий экран, то у вас есть контроль над этим, например, не назначать звук ... или останавливать воспроизведение звука и т. д. ..   -  person Max    schedule 08.05.2020
comment
@Max Я использую CallKit, но звонок никогда не отключается.   -  person khush    schedule 08.05.2020


Ответы (1)


Когда Receiver нажимает на завершающий вызов, вызывается ваш метод doUnpublish, который, в свою очередь, вызывает отключение сеанса для отключения от сеанса opentok. Отключение сеанса приводит к срабатыванию делегата вызывающей стороны connectionDestroyed, поэтому вызывающая сторона знает, что получатель отключился от сеанса.

Проблема возникает, когда Receiver никогда не отвечает на звонок, поэтому он никогда не подключается к сеансу OpenTok. Если он никогда не подключается к сеансу, делегаты connectionCreated и connectionDestroyed вызывающего абонента никогда не будут уволены.

Способ решить вашу проблему - установить таймер. На стороне вызывающего абонента запустите таймер, когда он вызовет Receiver. Если делегат connectionCreated не запускается в течение 1 минуты, это означает, что Receiver либо отклонил вызов, либо пропустил вызов.

person songz    schedule 21.08.2014
comment
возможно ли установить только таймер или мне нужно передать сообщение об этом вызывающему абоненту? - person Max; 22.08.2014
comment
По истечении таймера вызывающая сторона должна вызвать session.disconnect(), чтобы выйти из сессии. Возможно, вы также захотите добавить таймер на стороне получателя, чтобы он не звонил вечно. - person songz; 22.08.2014
comment
нет со стороны получателя, если пользователь каким-либо образом завершает вызов или отключается, то автоматически отключается от получателя и останавливает музыку. - person Max; 23.08.2014
comment
Вам понадобится какой-то тип обмена сообщениями между вызывающим абонентом и получателем, чтобы, когда вызывающий/получатель каким-либо образом завершал вызов, другая сторона также должна была получить уведомление о завершении вызова. - person songz; 26.08.2014
comment
в моем случае у меня есть вызов, но все еще звонит на другой стороне - person Mehul Tank; 21.04.2021