1

だから私はAVFoundation-AVPlayerAVPlayerLayer. 現在、プレーヤーにやりたいことは、そのビデオへのハードコーディングされた URL を使用して、アセット ライブラリでビデオを再生することだけです。SubClassこれをofUIViewに含めて、アプリ全体で使用できるようにしたいと考えています。

これまでの私のコードは次のとおりです CUPlayer.h::

@interface CUPlayer : UIView

{
    AVPlayer *player;
    AVPlayerLayer *playerLayer;
    AVPlayerItem *item;
    NSURL *url;
}


@property(nonatomic) UIViewAutoresizing autoresizingMask;
@end

CUPlayer.m:

@implementation CUPlayer

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        // Initialization code
        self.backgroundColor = [UIColor redColor];
        [self setupURL];
    }
    return self;
}


-(void)setupURL
{
    NSLog(@"URL setting up");
    NSString *string = @"assets-library://asset/asset.mov?id=0A937F0D-6265-452D-8800-   1A760E8E88B9&ext=mov";
    url = [[NSURL alloc] initFileURLWithPath: string];
    [self setupPlayerForURL];
}

-(void)setupPlayerForURL
{
    AVAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
    item = [AVPlayerItem playerItemWithAsset:asset];
    player = [AVPlayer playerWithPlayerItem:item];
    [player addObserver:self forKeyPath:@"status" options:0 context:nil];
    playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];


    //player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

    [self.layer addSublayer:playerLayer];
    playerLayer.frame = CGRectMake(0, 0, 200, 200);
    //[playerLayer setBackgroundColor:[UIColor greenColor].CGColor];
}



- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if (object == player && [keyPath isEqualToString:@"status"]) {
         if (player.status == AVPlayerStatusFailed) {
            NSLog(@"AVPlayer Failed");
         } else if (player.status == AVPlayerStatusReadyToPlay) {
            NSLog(@"AVPlayer Ready to Play");
            [player play];
         } else if (player.status == AVPlayerItemStatusUnknown) {
             NSLog(@"AVPlayer Unknown");
        }
    }
}

そして、View Controller からこれを呼び出しています。

CUPlayer *cuPlayer = [[CUPlayer alloc]initWithFrame:CGRectMake(0, 0, 250, 250)];
[self.view addSubview:cuPlayer];

これは準拠していますが、ビデオが再生されずに赤い四角が表示されます。ローカル ファイルへの URL は間違いなく正しいです。View Controller にすべてのコードを保持し、play を実行すると、動作させることができます-(void)viewDidLayoutSubviews

この問題を解決するために、すべてのドキュメントを何度も読みました。

トム

4

0 に答える 0