0

ビデオの再生を処理するために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オブジェクトを再利用して新しいアイテムを再生する方法があるかどうか疑問に思っていますか?

4

1 に答える 1

0

これが最終的に機能したものです。

item = AVPlayerItem.playerItemWithURL(@url)
$video.replaceCurrentItemWithPlayerItem(item)

アセットの作成方法に問題があるようです。アセットをスキップして、アイテムを直接作成しました。

于 2013-01-20T16:26:07.577 に答える