С мобильного приложения iOS по WebRTC¶
Описание¶
WCS предоставляет SDK для разработки клиентских приложений на платформе iOS
Схема работы¶
- iOS-устройство соединяется с сервером по протоколу Websocket и отправляет команду
publishStream
. - iOS-устройство захватывает микрофон и камеру и отправляет WebRTC поток на сервер.
- Браузер устанавливает соединение по Websocket и отправляет команду
playStream
. - Браузер получает WebRTC поток и воспроизводит этот поток на странице.
Краткое руководство по тестированию¶
- Для теста используем:
- демо-сервер
wcs5-us.flashphoner.com
; - мобильное приложение iOS;
-
веб-приложение Two Way Streaming для отображения захваченного потока
-
Запустите приложение на iPhone. Введите URL WCS-сервера и имя потока. Опубликуйте поток, нажав
Publish
:
-
Откройте веб-приложение Two Way Streaming. Укажите в поле под окном плеера имя потока, транслируемого с iPhone, и нажмите кнопку
Play
. Браузер начнет воспроизведение потока:
Последовательность выполнения операций¶
Ниже описана последовательность вызовов при использовании примера Streamer
-
Установка соединения с сервером
FPWCSApi2.createSession()
code
FPWCSApi2SessionOptions *options = [[FPWCSApi2SessionOptions alloc] init]; NSURL *url =[[NSURL alloc] initWithString:_connectUrl.text]; options.urlServer = [NSString stringWithFormat:@"%@://%@:%@", url.scheme, url.host, url.port]; streamName = [url.path.stringByDeletingPathExtension stringByReplacingOccurrencesOfString: @"/" withString:@""]; options.appKey = @"defaultApp"; NSError *error; session = [FPWCSApi2 createSession:options error:&error];
-
Получение от сервера события, подтверждающего успешное соединение
FPWCSApi2Session.on:kFPWCSSessionStatusEstablished callback
code
-
Публикация потока
FPWCSApi2Session.createStream()
code
FPWCSApi2Session *session = [FPWCSApi2 getSessions][0]; FPWCSApi2StreamOptions *options = [[FPWCSApi2StreamOptions alloc] init]; options.name = streamName; options.display = _videoView.local; if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) { options.constraints = [[FPWCSApi2MediaConstraints alloc] initWithAudio:YES videoWidth:640 videoHeight:480 videoFps:15]; } NSError *error; publishStream = [session createStream:options error:&error];
-
Получение от сервера события, подтверждающего успешную публикацию потока
FPWCSApi2Stream.on:kFPWCSStreamStatusPublishing callback
code
-
Отправка аудио-видео потока по WebRTC
-
Остановка публикации потока
FPWCSApi2Session.disconnect()
code
if ([button.titleLabel.text isEqualToString:@"STOP"]) { if ([FPWCSApi2 getSessions].count) { FPWCSApi2Session *session = [FPWCSApi2 getSessions][0]; NSLog(@"Disconnect session with server %@", [session getServerUrl]); [session disconnect]; } else { NSLog(@"Nothing to disconnect"); [self onDisconnected]; } } else { //todo check url is not empty [self changeViewState:_connectUrl enabled:NO]; [self connect]; }
-
Получение от сервера события, подтверждающего остановку публикации потока
FPWCSApi2Sessionon:kFPWCSSessionStatusDisconnected callback
code