AVPlayerItem的canPlaySlowForward属性从未被调用过

时间:2016-04-02 20:59:01

标签: swift avplayer tvos avplayeritem

我尝试为使用AVPlayerLayer播放的视频启用慢播放速率。为此,文档指出,如果rate返回AVPlayerItem true,则canPlaySlowForward将在0.0 - 1.0范围内启用AVPlayerItem。此属性是只读的,因此您需要子类canPlaySlowForward并覆盖此属性才能完成此操作。我已经这样做了,但视频仍然没有以较慢的速度播放,它始终是1.0的速率。它甚至从不调用import AVFoundation class SlowMoPlayerItem: AVPlayerItem { override var canPlaySlowForward: Bool { return true } } 属性。这是为什么?

let asset = AVAsset(URL: NSBundle.mainBundle().URLForResource("some-video", withExtension: "mp4")!)
let playerItem = SlowMoPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)
player.rate = 0.5
player.muted = true

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.layer.bounds
self.view.layer.addSublayer(playerLayer)
player.play()

播放视频:

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
}

我做的唯一与视频/音频相关的事情是阻止它停止背景音频,通过:

<oauth2client.client.OAuth2Credentials object at 0x7fd6306c4d30>
False
Traceback (most recent call last):
  File "./main.py", line 105, in <module>
    main()
  File "./main.py", line 88, in main
    service = discovery.build('gmail', 'v1', http=http)
  File "/usr/lib/python3/dist-packages/oauth2client/util.py", line 137, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/googleapiclient/discovery.py", line 197, in build
    resp, content = http.request(requested_url)
  File "/usr/lib/python3/dist-packages/oauth2client/client.py", line 562, in new_request
    redirections, connection_type)
  File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1138, in request
    headers = self._normalize_headers(headers)
  File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1106, in _normalize_headers
    return _normalize_headers(headers)
  File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 194, in _normalize_headers
    return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip())  for (key, value) in headers.items()])
  File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 194, in <listcomp>
    return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip())  for (key, value) in headers.items()])
TypeError: sequence item 0: expected str instance, bytes found

视频文件不包含音轨,但仍需要包括。

1 个答案:

答案 0 :(得分:3)

致电rate后设置play()。无需继承AVPlayerItem

func playVideo() {
    let asset = AVAsset(URL: NSBundle.mainBundle().URLForResource("SampleVideo", withExtension: "mp4")!)
    let playerItem = AVPlayerItem(asset: asset)
    let player = AVPlayer(playerItem: playerItem)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds
    self.view.layer.addSublayer(playerLayer)
    player.play()
    player.rate = 0.5
}