iPhone模拟器可以播放视频,真机不能播放

问题描述 投票:0回答:6

我正在 Xcode 7.2 上用 Swift 构建一个应用程序

我向我的 ViewController 添加了一个视频。这是代码:

import UIKit
import AVKit
import AVFoundation

class GymViewController: UIViewController {





var playerViewController = AVPlayerViewController()
var playerView = AVPlayer()

let fileFemaleURL = NSURL(fileURLWithPath:"/Users/marienkoen/Documents/AppDevelopment/ROZsport/ROZsport/GymFemale-2434.m4v")


override func viewDidLoad() {
super.viewDidLoad()
}



@IBAction func playButtonPressed(sender: AnyObject) {


playerView = AVPlayer(URL: fileFemaleURL)

playerViewController.player = playerView

self.presentViewController(playerViewController, animated: true){
self.playerViewController.player?.play()
}

我可以在模拟器中运行应用程序时播放此视频,但它无法在真实设备上运行。我在这里缺少什么?

ios swift video avkit
6个回答
1
投票

我可能读错了,但您似乎正在使用位于您计算机上的文件?


1
投票

感谢所有的提示。我创建了这些:

let path = NSBundle.mainBundle().pathForResource("video", ofType:"m4v")

并在按钮操作中调用它们:

@IBAction func playButtonPressed(sender: AnyObject) {

playerView = AVPlayer(URL: NSURL(fileURLWithPath: path!))
playerViewController.player = playerView

self.presentViewController(playerViewController, animated: true){
self.playerViewController.player?.play()}}

它有效!

谢谢!


0
投票

因为您使用的路径来自模拟器,所以在真实设备上它发生了变化。 如果您将此文件添加到您的项目中,您可以通过以下方式获取此网址:

func getDocumentsURL() -> NSURL {
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    return documentsURL
}

func fileInDocumentsDirectory(filename: String) -> String {

    let fileURL = getDocumentsURL().URLByAppendingPathComponent(filename)
    return fileURL.path!

}

0
投票

请注意,文件名是硬编码在代码中的,文件路径来自 Mac 设备上的本地系统路径。当您在模拟器上运行代码时,它正在您的 Mac 上运行,因此它能够找到文件路径。但是,当您在设备上运行它时,它无法访问提供的路径位置。因此,这个问题。如果它是您的移动设备上可用视频的路径,或者是您在移动设备上运行应用程序时可以访问的公共 URL。


-1
投票

也许问题是文件名在 iPhone 上区分大小写,但在模拟器中不区分大小写?


-1
投票

对于未来遇到这个线程的开发人员...我今天在解决 xcode 15.1 swift 5.x 上的相同问题时遇到了这个问题。我的视频可以在模拟器中播放,但不能在运行 ios 12.5.7 的 ipad mini 2 测试设备上播放。

我花了很多时间测试并与chatgpt讨论可能的问题。检查 QuickTime 播放器屏幕录制 (H.264) 的编解码器以及其他设置。最终,我发现这行代码导致播放和播放器控件消失,但音频仍在播放。

playerController.view.translatesAutoresizingMaskIntoConstraints = false

删除这条线可以使视频根据需要播放,并且控件可见。它似乎根本不影响模拟器,但旧的 ipad mini 不喜欢它。

© www.soinside.com 2019 - 2024. All rights reserved.