如何让 AVPlayer 立即出现而不是在视频结束后出现?
How to make AVPlayer appear instantly instead of after video ends?
我们的应用程序允许用户录制视频,然后应用程序添加字幕并导出编辑后的视频。
目标是立即重播视频,但 AVPlayer 仅在视频播放结束后出现(并且仅播放音频,这是一个单独的问题)。
这是现在发生的事情:我们显示预览,以便用户可以实时查看他正在录制的内容。用户完成录制后,我们要回放视频以供查看。不幸的是,没有视频出现,只有音频播放。音频播放完毕后,会出现表示视频某帧的图像。
为什么会这样?
func exportDidFinish(exporter: AVAssetExportSession) {
println("Finished exporting video")
// Save video to photo album
let assetLibrary = ALAssetsLibrary()
assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in
println("Saved video to album \(exporter.outputURL)")
self.playPreview(exporter.outputURL)
if (error != nil) {
println("Error saving video")
}
})
}
func playPreview(videoUrl: NSURL) {
let asset = AVAsset.assetWithURL(videoUrl) as? AVAsset
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.frame
view.layer.addSublayer(playerLayer)
player.play()
}
也许这可以帮助:
let assetLibrary = ALAssetsLibrary()
assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in
if (error != nil) {
println("Error saving video")
}else{
println("Saved video to album \(url)")
self.playPreview(url)
}
})
将“url
”发送到“playPreview
”,留下“completionBlock
”,而不是来自“AVAssetExportSession
”的“
”
也许……!
答案是我们一开始的视频合成不正确,如下所述:。
问题的另一部分(在 images/video 出现之前很长时间播放的音频)在这里得到了回答:
希望这些可以帮助人们避免我们所遭受的痛苦! :)
我们的应用程序允许用户录制视频,然后应用程序添加字幕并导出编辑后的视频。
目标是立即重播视频,但 AVPlayer 仅在视频播放结束后出现(并且仅播放音频,这是一个单独的问题)。
这是现在发生的事情:我们显示预览,以便用户可以实时查看他正在录制的内容。用户完成录制后,我们要回放视频以供查看。不幸的是,没有视频出现,只有音频播放。音频播放完毕后,会出现表示视频某帧的图像。
为什么会这样?
func exportDidFinish(exporter: AVAssetExportSession) {
println("Finished exporting video")
// Save video to photo album
let assetLibrary = ALAssetsLibrary()
assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in
println("Saved video to album \(exporter.outputURL)")
self.playPreview(exporter.outputURL)
if (error != nil) {
println("Error saving video")
}
})
}
func playPreview(videoUrl: NSURL) {
let asset = AVAsset.assetWithURL(videoUrl) as? AVAsset
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.frame
view.layer.addSublayer(playerLayer)
player.play()
}
也许这可以帮助:
let assetLibrary = ALAssetsLibrary()
assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in
if (error != nil) {
println("Error saving video")
}else{
println("Saved video to album \(url)")
self.playPreview(url)
}
})
将“url
”发送到“playPreview
”,留下“completionBlock
”,而不是来自“AVAssetExportSession
”的“
也许……!
答案是我们一开始的视频合成不正确,如下所述:
问题的另一部分(在 images/video 出现之前很长时间播放的音频)在这里得到了回答:
希望这些可以帮助人们避免我们所遭受的痛苦! :)