ビデオの再生を処理するためにAVFoundationとMacRubyを使用しています。最初に以下のコードを使用して、AVPlayerでビデオを再生するのに問題はありません。
videoWindow.setFrame(@frame, display:true, animate:true)
@content_view = self.videoWindow.contentView
@content_view.wantsLayer = true
asset = AVAsset.assetWithURL(url)
item = AVPlayerItem.new
item.initWithAsset(asset)
$video = AVPlayer.alloc.initWithPlayerItem(item)
@player_layer = AVPlayerLayer.playerLayerWithPlayer($video)
@player_layer.Frame = @frame
@content_view.layer.addSublayer(@player_layer)
@player_layer.videoGravity = AVLayerVideoGravityResize
$video.seekToTime(CMTimeMake(4, 1))
$video.play
問題が発生するのは、再生を新しいビデオに変更しようとしているときです。これを行うには、同じAVPlayerオブジェクトを使用し、replaceCurrentItemWithPlayerItemコマンドを使用しようとしています。これを実行しようとすると、アプリケーションが応答しなくなります。
asset2 = AVAsset.assetWithURL(@url2)
item2 = AVPlayerItem.new
item2.initWithAsset(asset2)
$video.pause
$video.replaceCurrentItemWithPlayerItem(item2)
SelectorOnMainThreadも実行してみましたが、同じ結果が得られます。
$video.performSelectorOnMainThread('replaceCurrentItemWithPlayerItem:', withObject:item2, waitUntilDone:true)
AVPlayerオブジェクトを再利用して新しいアイテムを再生する方法があるかどうか疑問に思っていますか?