Подтвердить что ты не робот

Как играть в файлы фильмов без расширения файлов на iOS с помощью MPMoviePlayerController или AVPlayer?

Я хочу играть в iOS 4.3 на iPad. Я успешно использовал MPMoviePlayerController и AVPlayer для загрузки файлов с удаленного URL, когда имя файла имеет расширение файла. Однако, когда я использую CDN, который не возвращает имя файла (просто недопустимое случайное имя), ни MPMoviePlayerController или AVPlayer, похоже, не справляются.

Есть ли способ сказать любому игроку, что он действительно является фильмом типа x, и ему просто нужно его воспроизвести?

MPMoviePlayerController вернет следующую ошибку от измененного уведомления о состоянии:

{
    MPMoviePlayerPlaybackDidFinishReasonUserInfoKey = 1;
    error = "Error Domain=MediaPlayerErrorDomain Code=-12847 \"This movie format is not supported.\" UserInfo=0x5b60030 {NSLocalizedDescription=This movie format is not supported.}";
}

Я знаю, что файл является допустимым файлом m4v, так как при его переименовании все нормально.

4b9b3361

Ответ 1

Если плеер не может угадать формат файла, вам нужно проверить, что CDN отправляет правильный тип mime обратно. Я предполагаю, что ваш CDN не может правильно угадать mimetype и не может игрок.

В большинстве случаев это связано с тем, как CDN представляет HTTP-заголовок. Убедитесь, что заголовок "Content-Type" установлен в формат видео, соответствующий вашему контенту.

Ответ 2

Файл в tmp

NSString* _filePath

Создать символическую ссылку

NSFileManager *filemgr = [NSFileManager defaultManager];
NSString *slink = [_filePath stringByAppendingPathExtension:@"m4v"];
if (![filemgr fileExistsAtPath:slink]) {
    NSError *error = nil;
    [filemgr createSymbolicLinkAtPath:[_filePath stringByAppendingPathExtension:@"m4v"] withDestinationPath: _filePath error: &error];
    if (error) {
        ...
    }
}
...

воспроизведение видео с помощью slink

Ответ 3

Дилан прав.

Оба MPMoviePlayer и AVPlayer нуждаются в расширении файла, чтобы воспроизводить файл с URL-адреса, иначе будет отображаться сообщение об ошибке. Лучше использовать какие-то трюки.

Ответ 4

iPhone поддерживает видео H.264, MPEG-4 в форматах .mp4,.m4v,.mov и аудиофайлах в AAC, MP3, M4a, Apple без потерь и Audible. Вы можете использовать NSFileManager -contentsOfDirectoryAtPath: error: метод для получения массива с содержимым каталога (в виде строк). Затем вы просто выполняете операции с строками.

Ответ 5

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

NSLog(@"linked path: %@",[videoURL absoluteString]);
NSString* linkedPath;
AVURLAsset* asset;
NSFileManager *filemgr = [NSFileManager defaultManager];

for (NSString* string in [AVURLAsset audiovisualMIMETypes]) {

    if ([string containsString:@"video/"]) {

        NSLog(@"Trying: %@",string);

        linkedPath = [[videoURL absoluteString] stringByAppendingPathExtension:[string stringByReplacingOccurrencesOfString:@"video/" withString:@""]];
        NSLog(@"linked path: %@",linkedPath);

        if (![filemgr fileExistsAtPath:linkedPath]) {
            NSError *error = nil;
            [filemgr createSymbolicLinkAtURL:[NSURL URLWithString:linkedPath] withDestinationURL:videoURL error:&error];
            if (error) {
               NSLog(@"error %@",error.localizedDescription);
            }
        }

       asset = [AVURLAsset assetWithURL:[NSURL URLWithString:linkedPath]];
        if ([asset isPlayable]) {
            NSLog(@"Playable");
            break;
        }else{
            NSLog(@"Not Playable");
            asset = nil;
        }
    }

}

Ответ 6

Это своего рода хак, но то, что вы можете сделать, - это запустить каждое имя с помощью метода, который проверяет период с тремя символами после него. Если нет, просто добавьте .m4v автоматически. Или получите тип MIME и добавьте расширение автоматически на основе возвращаемого типа. Если доступно. Для получения дополнительной информации просмотрите документацию с помощью NSString. Удачи! Сообщите мне, помогло ли это.