标签: avplayer

播放通过 CloudKit 下载的视频作为 CKAsset - iOS

我正在制作一个录制视频的应用程序,使用带有 CKAsset 的 CloudKit 将其上传到 iCloud,然后下载文件并在 AVPlayer 中播放。这都是用 Swift 2.0 编写的

我已经下载了数据,我想我已经能够参考它,但我不确定。当我将 URL 转换为 NSData 对象并将其打印到控制台时,数据/垃圾确实会打印。然而,视频文件作为二进制文件下载。我能够转到 CloudKit 仪表板并下载文件并将“.mov”附加到它,并且它在 Quicktime 中打开没问题。

所以我认为我的主要问题是我无法弄清楚如何让视频文件实际播放,因为该文件没有扩展名。我曾尝试使用 URLByAppendingPathExtension() 将 '.mov' 附加到末尾,但无济于事。让我知道任何想法!

上传视频

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let tempURL = info[UIImagePickerControllerMediaURL] as! NSURL

    dismissViewControllerAnimated(true) { () -> Void in
        self.uploadVideoToiCloud(tempURL)
        print("\n     Before Upload: \(tempURL)\n")
    }
}

func uploadVideoToiCloud(url: NSURL) {
    let videoRecord = CKRecord(recordType: "video", recordID: id)

    videoRecord["title"] = "This is the title"

    let videoAsset = CKAsset(fileURL: url)
    videoRecord["video"] = videoAsset

    CKContainer.defaultContainer().privateCloudDatabase.saveRecord(videoRecord) …
Run Code Online (Sandbox Code Playgroud)

ios avplayer icloud swift cloudkit

0
推荐指数
1
解决办法
2181
查看次数

添加 AVPlayerLayer 作为子层不会完全填充父视图

我有一个包含全宽的单元格UIImageView,我正在创建一个AVPlayerLayer来播放内嵌视频。这几乎完美地工作,唯一的问题是当它被添加到previewImage图像视图时,这是一个完美显示的全宽图像视图,它的左侧和右侧有 1 px 的间隙。因此,当视频播放时,您可以真正注意到它并且非常刺耳。

我是这样设置的:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: false)

    let cell = tableView.cellForRow(at: indexPath) as! GameMediaCell

    if (cell.playerLayer != nil) {
        cell.playerLayer?.player?.pause()
        cell.playerLayer?.removeFromSuperlayer()
        cell.playerLayer = nil

    } else {
        if let clipURI = viewModel?.mediaURIForIndex(indexPath.row) {

            let player = AVPlayer(url: clipURI)
            let playerLayer = AVPlayerLayer(player: player)

            playerLayer.frame = cell.previewImage.frame

            cell.previewImage.layer.addSublayer(playerLayer)
            cell.playerLayer = playerLayer

            playerLayer.player?.play()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ios avplayer swift

0
推荐指数
1
解决办法
761
查看次数

两个 AVPlayer 视频不同步 (Swift)

我有两个AVPlayer()项目播放相同持续时间(10 秒)的视频。目标是让它们循环并彼此保持同步。我将它们添加为相同的子层,UIView然后调用player.play()它们中的每一个。

但问题是,由于代码执行显然有最轻微的延迟,因为一个在另一个之后调用,视频不同步(虽然只有几毫秒,但很明显)。

正如我看到其他帖子所建议的那样,我没有创建 AVMutableComposition 的选项,那么无论如何要让两个独立的播放器真正保持同步并完全同时播放?

谢谢!

ios avplayer swift

0
推荐指数
1
解决办法
1320
查看次数

当网络连接不良且 AVPlayer 正在播放时应用程序挂起

我正在开发一个 iOS 无线电应用程序。当网络连接良好时,应用程序运行正常。

我的情况略有不同。我限制了 iPhone 中的移动数据速度(设置 -> 开发人员 -> 网络链接调节器),并从列表中选择了较差的网络选项。此时,播放器正在尝试流式传输音频内容,如果我尝试呈现或关闭视图控制器,则应用程序会变慢或挂起。我尝试从主队列中呈现视图控制器,但这不起作用。

   let requestedKey = ["playable","duration"]
            asset.loadValuesAsynchronously(forKeys: requestedKey) {
                DispatchQueue.main.async{
                    var error: NSError?
                    let keyStatus = asset.statusOfValue(forKey: "playable", error: &error)
                    if keyStatus == AVKeyValueStatus.failed || !asset.isPlayable {
                        completionHandler(false, nil)
                        return
                    }
                    completionHandler(true, asset)
                }
            }

if player == nil {
            player = AVPlayer()

        }
        playerItem = AVPlayerItem(asset: asset)
Run Code Online (Sandbox Code Playgroud)

这就是我设置播放器的方式。当连接较差或边缘时,请帮助我解决这个严重的性能问题。

objective-c ios avplayer swift avplayeritem

0
推荐指数
1
解决办法
1437
查看次数

使用多个 AVPlayer 时如何检测哪个视频结束?

我在屏幕上并排播放两个视频,所以我有两个 AVPlayer 实例。我正在使用工作正常的通知检测视频播放结束。我的选择器(playerDidFinishPlaying)在两个视频结束时都被调用。

NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil) 
Run Code Online (Sandbox Code Playgroud)

现在我的问题出在选择器(playerDidFinishPlaying)中,我想检测它调用了哪个 avplayer?如何唯一识别视频结束的 AVPlayer?

ios avplayer swift avplayeritem avkit

0
推荐指数
1
解决办法
609
查看次数

标签 统计

avplayer ×5

ios ×5

swift ×5

avplayeritem ×2

avkit ×1

cloudkit ×1

icloud ×1

objective-c ×1