だから私はAVFoundation
-AVPlayer
とAVPlayerLayer
. 現在、プレーヤーにやりたいことは、そのビデオへのハードコーディングされた 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
。
この問題を解決するために、すべてのドキュメントを何度も読みました。
トム