私のプロジェクトでは、サーバーからリモートmp4ビデオをダウンロードし、iOSデバイス(Swift 3、iOS 10)の「Documents」フォルダに保存します。 私は(など、AVPlayerItem/AVAssetを使用して、URLで)いくつかの方法でAVPlayerを使用して、ローカルビデオを再生しようとしましたが、私はいつもこのような画面になってしまう:iOS 10のSwift 3:デバイスのDocumentsフォルダからmp4/movローカルビデオファイルを再生する方法は?
をこれがあります私はドキュメントフォルダに動画が含まれていることをチェックしました
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let docDir : URL = urls.first {
let component = self.videoTutorialsEntries[indexPath.row].filename
let videoUrl = docDir.appendingPathComponent(component)
do {
let videoExists : Bool = try videoUrl.checkResourceIsReachable()
if videoExists {
let player = AVPlayer(url: videoUrl)
let playerController = AVPlayerViewController()
playerController.player = player
self.present(playerController, animated: true) {
playerController.player!.play()
}
} else {
print("Video doesn't exist")
}
} catch let error as NSError {
print(error)
}
}
、およびURL /パスが正しいこと、そしてそれがそう思わ:コードの最後のバージョンは、私は、ファイルを再生するために使用しようとしています。
私はまた、segueを使用してストーリーボードから別のAVKitビューコントローラーでこれを処理しようとしましたが、結果は変わりません。
セキュリティ上の理由から、リモートファイルを再生するためにInfo.plistを実行する必要があるなどの変更が必要なのかどうかは疑問ですが、ローカルファイルなのでアイデアが足りません。
誰もビデオファイルが再生されない理由を知っていますか?
UPDATE: 私は何とか破損している私が保存したファイルは(22メガバイトのようなものになるはずだと、アプリ (There's a way to access the document folder in iphone/ipad (real device, no simulator)?)のサンドボックスを分析し、実現したが、サンドボックスで、それはわずか数KBですこれは、問題が保存手順にあることを意味します)。 私はDropboxの上の私のリモートファイルを持っており、この技術を使用してファイル保存します。私は問題ができると仮定している私は(ダウンロードは動作します)pdfファイルのためにも、この非同期処理を使用しましたので
// Necessary when the remote server doesn't send the file size
var request = URLRequest(url: self.videoUrl, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 30.0)
request.httpMethod = "HEAD";
request.timeoutInterval = 5;
let group = DispatchGroup()
group.enter()
URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
if error != nil {
DispatchQueue.main.async(execute: {
self.showAlert(title: NSLocalizedString("Video Unreachable", comment: "Video Unreachable Title"), message: NSLocalizedString("It was not possible to download the video file!", comment: "Video Not Downloaded Title"))
})
} else {
DispatchQueue.main.async(execute: {
self.contentLength = response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown
group.leave()
self.progressLabel?.center = CGPoint(x:UIScreen.main.bounds.size.width/2, y:(self.pointInTable.y/2)+40)
self.progressLabel?.isHidden = false
})
self.downloadVideo()
}
}).resume()
func downloadVideo() {
self.isVideo = true
downloadTask = backgroundSession.downloadTask(with: self.videoUrl)
downloadTask.resume()
}
をビデオへのドロップボックスのリンクになります。その可能性のある問題に関するアイデアはありますか?
更新日: 私は最終的にファイルを再生することができました! 問題は、私が使用していたDropboxのURLフォームに関連していました。 https://www.dropbox.com/s/xxxxxxxxxxxx/xxxxxx.mp4?dl=1
ファイルをダウンロードしたい、そしてそれを視覚化していないことを意味し、最終的な「DL = 1?」と: は、ファイルをダウンロードするためには、このようなリンクを必要とします。私はそれを逃していた。
最後に、すべてがコードのこの作品で働い:
let fileManager = FileManager.default
let docsUrl = try! fileManager.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let component = self.videoTutorialsEntries[indexPath.row].filename
let fileUrl = docsUrl.appendingPathComponent(component)
performSegue(withIdentifier: "showLocalVideo", sender: fileUrl)
(私はただのURLアイテムと資産の(不要)で、ストーリーボードとセグエからのビューコントローラを使用していた
。これは他の誰かがDropboxのからの遠隔映像を保存し、ローカルに遊んで苦労役立ちます希望
ありがとうございます、私は資産と商品も試しましたが、残念ながら結果は変わりません。 – Thorh73