将照片从影集加载到uiview以播放[关闭]

问题描述 投票:-3回答:1

我下面的快捷代码从网络加载了一个网址视频,并在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))
}




}
swift video uiview avfoundation photo-gallery
1个回答
0
投票
  • 首先您必须导入以下库

    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
}
}
  • 这可以,如果您遇到任何错误,请返回此页面,如果它可以正常工作,请批准答案
© www.soinside.com 2019 - 2024. All rights reserved.