使用MacRuby时无法使用replaceCurrentItemWithPlayerItem

时间:2012-06-05 06:11:18

标签: avfoundation macruby

我正在使用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)

我也尝试过performSelectorOnMainThread,但我得到了相同的结果。

    $video.performSelectorOnMainThread('replaceCurrentItemWithPlayerItem:', withObject:item2, waitUntilDone:true)

我想知道是否有办法重用我的AVPlayer对象来播放新项目?

1 个答案:

答案 0 :(得分:0)

这就是最终的工作:

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

我创建资产的方式似乎有些问题。我刚跳过资产并直接创建了该项目。