Потоковое видео в iOS 4 с помощью MPMoviePlayerViewController?

Я хочу транслировать видеофайл *.m3U8 через потоковую передачу по http на iPhone. До iOS 3.2 он безупречно воспроизводился на iPhone.
Но с последними изменениями в API MoviePlayer я не могу транслировать этот файл на iOS4. устройства.

Теперь я использую объект MPMoviePlayerViewController для воспроизведения этого файла, но каждый раз получаю сообщение об ошибке «Код ошибки = 2. Файл не может быть воспроизведен».
Описания ошибки недостаточно, а образец кода Apple для MPMoviePlayerViewController устарел.
Пожалуйста, помогите мне с решением или дайте ссылку на пример кода или рабочие решения.


person amavi    schedule 26.06.2011    source источник


Ответы (1)


Контроллер:

#import <AVFoundation/AVFoundation.h>

@property (nonatomic, retain) AVPlayer *avPlayer;
@property (nonatomic, retain) IBOutlet PlayerView *playerView;
@property (nonatomic, retain) AVPlayerItem *playerItem;

// Use a HTTP URL, example: http://192.168.2.103/video.m3u8
-(void) setUpPlayer:(NSURL*) url {
    AVURLAsset *anAssest= [[AVURLAsset alloc]initWithURL:url options:nil];
    [anAssest loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
        NSError *error = nil;
        AVKeyValueStatus status = [anAssest statusOfValueForKey:@"tracks" error:&error];
        if (status == AVKeyValueStatusLoaded) {
            self.playerItem = [AVPlayerItem playerItemWithAsset:anAssest];
            self.avPlayer = [AVPlayer playerWithPlayerItem:self.playerItem];
            self.playerView.player=self.avPlayer;
            [self.avPlayer play];
        } else {
            NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]);
        }
    }];
}

Вид:

#import <AVFoundation/AVFoundation.h>
#import <UIKit/UIKit.h>
@interface PlayerView : UIView
@property (nonatomic, retain) AVPlayer* player;
@end

#import "PlayerView.h"
@implementation PlayerView
+ (Class)layerClass {
    return [AVPlayerLayer class];
}
- (AVPlayer*)player {
    return [(AVPlayerLayer*)[self layer] player];
}
- (void)setPlayer:(AVPlayer*)player {
    [(AVPlayerLayer*)[self layer] setPlayer:player];
}
@end

Что-то вроде этого :P Вы должны создать m3u8 с помощью команды Apple mediafilesegmenter, но, вероятно, она все равно будет работать.

person Jano    schedule 26.06.2011
comment
Он воспроизводит только звук, а не видео. Более того, он не предоставляет интерфейс проигрывателя. Звук продолжает воспроизводиться в фоновом режиме. Можно ли использовать MPMoviePlayerController для потоковой передачи по http? - person amavi; 27.06.2011