Будет ли BSD UDP Socket работать с фоновым режимом VoIP в iOS? - PullRequest
3 голосов
/ 08 марта 2011

Я не могу заставить его работать, но это не значит, что это невозможно.

Я видел, как другие люди говорили, что мне нужно использовать TCP Port, но есть ли у кого-нибудь какие-нибудь указатели на какую-либо официальную документацию, в которой было бы последнее слово?

Ответы [ 5 ]

5 голосов
/ 14 октября 2011

Да, в этом суть.

Но в iOS 4.2.1 (например) вы можете получать в UDP, находясь в фоновом режиме БЕЗ любого подтверждения.Просто объявив CFReadStream как сокет VoIP, слушающий в applicationDidEnterBackground ... Начиная с iOS 4.3 и выше, этот метод больше не работает.

Также Media5 использует «трюк» для поддержания активности приложения, таким образом, принимая входящие вызовыв фоновом режиме также с UDP.

1 голос
/ 25 июля 2011

Исходя из моих тестов, фоновое задание UDP более невозможно при iOS> = 4.3.

1 голос
/ 04 июля 2011

Возможно, не будет таких четких документов от Apple, которые звучат как «UDP на фоне невозможен».

Но факт заключается в том, что официальная документация заявляет об использовании одного из этих интерфейсов для выполнения фоновой сети:- NSInputStream и NSOutputStream - NSURLRequest - CFReadStreamRef и CFWriteStreamRef

При этом я считаю, что концепция потока не может обернуть неподключенный сокет режима UDP.http://lists.apple.com/archives/cocoa-dev/2010/Jul/msg00091.html

Таким образом, вы можете понять это, как Apple, позволяющая открывать «потоки» данных только в фоновом режиме, а не через сокеты UDP.

Я на самом деле не знаю, как управлял Bria Counterpathвыполнить фон UDP, но гипотеза состоит в том, что у них есть какой-то хак для выполнения кода в фоновом режиме вместо того, чтобы помечать специальный сокет как «поддерживающий жизнь»

0 голосов
/ 29 июня 2013

Для текущей версии iOS разрешен только сокет TCP со свойством VOIP в фоновом режиме.

ReadStream = NULL; WriteStream = NULL;

    CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)serverIP, Port, &readStream, &writeStream);

    CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); //VOIP property for input stream
    CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

    inputStream = (__bridge NSInputStream *)readStream;
    outputStream = (__bridge NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];

    [inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
    [outputStream  setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];

Это создаст простое TCP-соединение с сервером, а тип сокета - VOIP. Затем вы должны добавить фоновый режим приложения в список свойств.

0 голосов
/ 22 декабря 2011

Этот трюк состоит из воспроизведения тихого звука при переключении на фон?Потому что я думаю, что это больше не работает ...

...