Я пытаюсь создать простое приложение, которое позволяет мне записывать видео, а затем смотреть его. Я использую два вида: AVCamPreviewView
в левой части экрана (который отображает видеопоток в реальном времени с камеры iPhone) и AVPlayerLayerView
в правой части экрана (который должен отображать видео после его записи и сохранения). в папку документов приложения).
В то время как первая часть (отображение прямой трансляции) работает как шарм (для справки я использовал Apple AVCam-tutorial), вторая не работает: я могу запустить воспроизведение записанного видео: звук начинает воспроизводиться, но я не могу видеть что-нибудь, и я понятия не имею, почему это так.
Вот мой AVPlayerLayerView
-класс:
//
// AVPlayerLayerView.swift
// AVCamSwift
//
import UIKit
import AVFoundation
class AVPlayerLayerView: UIView {
var player: AVPlayer = AVPlayer()
var avPlayerLayer: AVPlayerLayer!
override init(frame: CGRect) {
super.init(frame: frame)
print("AVPlayerLayerView -> init with frame")
inits()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print("AVPlayerLayerView -> init with coder")
inits()
}
private func inits() {
let rootLayer: CALayer = self.layer
rootLayer.masksToBounds = true
avPlayerLayer = AVPlayerLayer(player: player)
rootLayer.insertSublayer(avPlayerLayer, atIndex: 0)
}
func setContentUrl(url: NSURL) {
print("Setting up item: \(url)")
let item = AVPlayerItem(URL: url)
player.replaceCurrentItemWithPlayerItem(item)
}
func play() {
if (player.currentItem != nil) {
print("Starting playback!")
player.play()
}
}
func pause() {
player.pause()
}
func rewind() {
player.seekToTime(CMTime(seconds: 0, preferredTimescale: 1))
}
func stop() {
pause()
rewind()
}
}
Воспроизведение видео должно начаться при нажатии соответствующей кнопки, и вот код, который запускает воспроизведение:
@IBAction func playVideoTap(sender: AnyObject) {
if let rfp = recordingFilePath {
playbackView.setContentUrl(rfp)
playbackView.play()
}
}
Как упоминалось ранее: Audio-Playback работает, но я ничего не вижу, поэтому я предполагаю, что мне нужно изменить положение AVPlayerLayer в моем AVPlayerLayerView-Class или что-то в этом роде. Есть идеи?
И вот фрагмент макета, на всякий случай, если это поможет...
РЕДАКТИРОВАТЬ:
Благодаря ответу Раджеша я наконец-то могу воспроизвести видео. Однако записанное видео отображается не внутри правой серой области экрана, а внутри крошечного квадрата вверху посередине экрана (см. снимок экрана). Есть идеи, как это исправить? Кроме того, соотношение сторон не такое, как в режиме записи...