AVFoundationを利用した動画表示用の便利クラス (使い方)

前回UPした動画再生クラス MovieView の使い方です
今回はサンプルとしてスライダーで再生位置の調整も行えるようにしてみました。

プライベートな変数にこんなのを用意して

UISlider* _slider;
MovieView* _movieView;

ビューの生成と破棄


-(void)dealloc
{
    if(_movieView){
        _movieView.delegate = nil;
        [_movieView removeFromSuperview];
        _movieView = nil;
    }
       
    [super dealloc];
}


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

     //スライダーの生成
     _slider = [[[UISlider alloc]initWithFrame:CGRectMake(0, 0, 300, 40)]autorelease];
        [self addSubview:_slider];
        [_slider addTarget:self action:@selector(seekBarValueChanged:) forControlEvents:UIControlEventValueChanged];

     //動画再生用Viewの生成
     _movieView = [[[MovieView alloc]initWithFrame:self.bounds]autorelease];
        _movieView.delegate = self;     //※再生だけならdelegateの設定は不要ですよ。
        [self addSubview:_movieView];
       
     //リソースからムービーのURLを取得して
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"opening" withExtension:@"mov"];

     //再生開始
     [_movieView playMovie: url];
    }
    return self;
}

各種イベントのハンドリング


//スライダーからのコールバック
- (void)seekBarValueChanged:(UISlider *)slider
{    
    //ムービーのシーク
    float val = slider.value;
    float duration = _movieView.movieDuration;
    float time = val * duration / _slider.maximumValue;

    [_movieView seekToSeconds:time];   
}


#pragma mark - MovieViewDelegate

//再生開始時の処理
-(void)movieView:(MovieView*)sender movieWillPlayItem:(AVPlayerItem*)playerItem duration:(Float64)duration
{
    //スライダーを初期位置に変更
    _slider.minimumValue = 0;
    _slider.maximumValue = duration;
    _slider.value        = 0;
   
}

//再生が進んだ時に順次呼ばれる
-(void)movieView:(MovieView*)sender moviePlayAtTime:(Float64)time duration:(Float64)duration
{
    //スライダーの位置を再生時間に合わせる
    float value = _slider.maximumValue * time / duration;
    _slider.value = value;
}

 
以上のような感じです。
スライダー関連の処理が多くなってしまいましたが、単純に再生するだけなら

_movieView = [[[MovieView alloc]initWithFrame:self.bounds]autorelease];
[self addSubview:_movieView];

NSURL *url = [[NSBundle mainBundle] URLForResource:@"opening" withExtension:@"mov"];
[_movieView playMovie: url];

これだけでいけます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です