我下面的快捷代码从网络加载了一个网址视频,并在uiview上播放。我想做的是,当选择func addVideo()时,将插入相机胶卷中的视频并在uiview上播放。我只希望在选择视频而不是照片的情况下插入视频。我假设您可以在avplayer的帮助下插入。
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var importBtn: UIView!
@IBOutlet weak var videoView: UIView!
var player: AVPlayer!
var playerLayer: AVPlayerLayer!
var isVideoPlaying = false
@IBOutlet weak var timeSlider: UISlider!
@IBOutlet weak var currentTimeLabel: UILabel!
@IBOutlet weak var durationLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://content.jwplatform.com/manifests/vM7nH0Kl.m3u8")!
player = AVPlayer(url: url)
playerLayer = AVPlayerLayer(player: player)
playerLayer.videoGravity = .resize
videoView.layer.addSublayer(playerLayer)
}
func addVideo(){
//get video from photo gallery
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
playerLayer.frame = videoView.bounds
}
@IBAction func playPressed(_ sender: UIButton) {
if isVideoPlaying {
player.pause()
sender.setTitle("Play", for: .normal)
}else {
player.play()
sender.setTitle("Pause", for: .normal)
}
isVideoPlaying = !isVideoPlaying
}
@IBAction func forwardPressed(_ sender: Any) {
guard let duration = player.currentItem?.duration else {return}
let currentTime = CMTimeGetSeconds(player.currentTime())
let newTime = currentTime + 5.0
if newTime < (CMTimeGetSeconds(duration) - 5.0) {
let time: CMTime = CMTimeMake(Int64(newTime*1000), 1000)
player.seek(to: time)
}
}
@IBAction func backwardsPressed(_ sender: Any) {
let currentTime = CMTimeGetSeconds(player.currentTime())
var newTime = currentTime - 5.0
if newTime < 0 {
newTime = 0
}
let time: CMTime = CMTimeMake(Int64(newTime*1000), 1000)
player.seek(to: time)
}
@IBAction func sliderValueChanged(_ sender: UISlider) {
player.seek(to: CMTimeMake(Int64(sender.value*1000), 1000))
}
}
首先您必须导入以下库
import AVFoundation
import AVKit
为此,您需要UIImagePickerController
(如果您想一次加载单个视频,否则您需要使用第三方库或pod)
步骤1:首先将UIImagePickerControllerDelegate
添加到您的类中,并为选择器声明一个变量
class ViewController: UIViewController , UIImagePickerControllerDelegate {
let videopicker: UIImagePickerController! = UIImagePickerController()
// Your Code will be here
}
步骤2:向addVideo
功能中添加以下代码
func addVideo(){
//get video from photo gallery
if (UIImagePickerController.isSourceTypeAvailable(.camera))
{
if UIImagePickerController.availableCaptureModes(for: .rear) != nil
{
videopicker.sourceType = .photoLibrary
videopicker.mediaTypes = [kUTTypeMovie as String]
videopicker.cameraCaptureMode = .video
videopicker.allowsEditing = false
videopicker.delegate = self
present(videopicker, animated: true, completion: {})
}
}
第3步:添加Delegate
的以下UIImagePicker
功能以将视频保存到所需位置
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : Any]) {
dismiss(animated: true, completion: nil)
guard
let mediaType = info[UIImagePickerControllerMediaType] as? String,
mediaType == (kUTTypeMovie as String),
let url = info[UIImagePickerControllerMediaURL] as? URL,
videoData?.write(to: `Your_Desired_location_path`, atomically: false)
else {
return
}
}