4

У меня есть простой HTTP-сервер, который в значительной степени просто служит файлу MP3 в кусках одинакового размера. Я пишу приложение iOS (для целей тестирования), которое в основном принимает URL-адрес и передает файл через MPMovieController. Вот мой пример кода:MPMoviePlayerController повторно подключается несколько раз

MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] init]; 
[mp setMovieSourceType:MPMovieSourceTypeStreaming]; 
mp.contentURL = [NSURL URLWithString:@"http://127.0.0.1:8080"]; 
[mp play]; 

Это работает. НО: на моем http-сервере я вижу несколько подключений (сначала один разрывается сразу, второй поток до конца обычно, хотя иногда есть 3-е соединение).

Я знаю, что это не проблема сервера, так как, когда я делаю это:

NSData *myData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://127.0.0.1:8080"]];

... то есть только 1 соединение, которое заканчивает чтение и разрывает соединение.

Вопрос: Почему MPMoviePlayerController необходимо установить и разбить эти соединения, прежде чем заканчивать чтение файла, почему он просто не ждет, пока больше данных не будет записано в сокете? Я не смог найти соответствующие документы, которые бы объясняли это :(

PS Если вам интересно, зачем мне это нужно, вот короткое объяснение: я пытаюсь подражать сценариям реальной жизни, где принимаются байты по MPMovieController кусковых с небольшими задержками произвольной длиной между ними

+1

Я не знаком с iOS вообще, так что возьмите это с фунтом соли ... но считаете ли вы, что «MPMoviePlayerController» может быть повторно подключен, поскольку у него недостаточно данных для продолжения игры? о времени между повторными соединениями и их отношении к отправленным кускам. Устранена ли проблема или уходит полностью, когда вы используете гораздо большие куски? Можете ли вы опубликовать захват пакетов, чтобы мы могли увидеть, есть ли что-нибудь странное в этом потоке? – Brad

+0

Брэд, спасибо вам за руководство. Я собираюсь проверить то, что вы упомянули, и, надеюсь, получить вывод, который имеет смысл. Я скоро отправлю информацию с подробностями – Nick

+0

Еще одна вещь, которую нужно проверить, - убедиться, что поток не ужасно поврежден. Если вы отбрасываете байты здесь или там, игроку будет сложно синхронизироваться с потоком. – Brad

ответ

0

Вы должны изменить свой сервер и добавить поддержку HTTP 206 Partial Content запросов/ответов. IOS запрашивает данные фильма через HTTP таким образом.

+0

Да, это то, что я должен был сделать ... Я надеялся минимизировать/упростить сервер, но контролер фильма настаивает на том, чтобы просить диапазоны байтов. Спасибо за подтверждение Джонатана – Nick

Смежные вопросы