как инициализировать видеообъект, используя данные, загруженные из соединения Socket - iOS - PullRequest
1 голос
/ 18 сентября 2011

Я пытаюсь транслировать видео (H264) по сети на iOS.Однако я передаю видеоданные (NSData) в буфер через открытый сокет на удаленный сервер (используя serverSocket), поэтому у меня нет URL-адреса к видео, который я могу использовать для создания MPMoviePlayerController.Как я могу инициализировать и воспроизвести видео на моем iPhone / iPad таким образом?

Вот часть кода со стороны клиента:

NSString *requestString = textField_.text;
NSString *url = @"http://192.168.3.11:10000";
NSData *myRequestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:myRequestData];

NSURLResponse *response = nil;
NSError *error = nil;

//send the request and get the response from the server.
NSData *content = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

#pragma mark--
#pragma mark--test video

//parse the content(NSData) into NSString.
NSString *string = [[NSString alloc] initWithData:content   encoding:NSASCIIStringEncoding];

//and then into NSURL.
NSURL *url2 = [NSURL URLWithString:string];

//so that it can be used by MPMoivePlayerController.
player_ = [[MPMoviePlayerController alloc] initWithContentURL:url2];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movieFinishedCallback:) 
                                             name:MPMoviePlayerPlaybackDidFinishNotification object:player_];
player_.shouldAutoplay = NO;
player_.repeatMode = YES;
player_.view.frame = CGRectMake(10, 10, 300, 300);
[self.view addSubview:player_.view];
[player_ play];

Проблема в том, что я могуполучить данные из содержимого (NSData), что означает, что на стороне сервера все в порядке.Но я не знаю, как извлечь данные из NSData в NSString, а затем в NSURL, чтобы в конечном итоге они могли использоваться MPMoviePlayerController.

Любая помощь будет оценена.Заранее большое спасибо!

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

Похоже, что вы синхронно загружаете файл, а затем воспроизводите его, это ужасный способ сделать это imho, но если это то, что вы хотите ..

Если у вас есть путь к вашим NSData (хранится на диске с распознаваемым расширением видео), вы можете просто сделать это:

myvideoPlayer = [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString: путь]];

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

Переход к более удобному интерфейсу пользователя (асинхронный):

В качестве альтернативы вы можете транслировать. Также есть возможность потоковой передачи и сохранения на диск одновременно, но это не особенно просто, так как вам приходится обрабатывать eofs самостоятельно - довольно забавно, потому что MPMoviePlayerController не имеет никаких событий eof. Я должен сказать, что можно воспроизводить mp4-файлы, пока файл все еще загружает довольно из коробки, но, выполняя какое-то создание более умного файла (создание действительного нижнего колонтитула файла), это можно сделать и с другими файлами. Не стесняйтесь задавать вопросы.

0 голосов
/ 18 сентября 2011

Невозможно использовать MPMoviePlayerController - нет общедоступного интерфейса для использования NSData вместо URL (локального или удаленного).

...