、機能していないAVPlayerViewControllerにバックエンドからAWSの動画のURLを表示しようとしています。ビデオURLがテーブルビューに表示されず、デバッガでこのエラーがスローされます。スウィフト4 - 私はAWSから画像のURLまたはAWSからも動画のURLから生成されたサムネイルのいずれかを保持するためにUIImageを設定し、テーブルビューを持っている奇妙なエラーが出ます
私は画像や動画のURLのいずれかを表示するには、セルをクリックすると、それは正しくビデオプレーヤーにsegues2017-12-29 12:20:37.053337-0800 VideoFit[3541:1366125] CredStore - performQuery - Error copying matching creds. Error=-25300, query={
class = inet;
"m_Limit" = "m_LimitAll";
"r_Attributes" = 1;
sync = syna;
}
、その後、私は再びエラーを取得し、三角形のスタートボタン何があることを意味しない、それを通る線を持っています再生するビデオ。
しかし、私はそれは問題ではないので、それが正常に渡されたURLを印刷するとき、問題がAVPlayerが何らかの理由で私のAWS動画のURLを扱うことができないです。それは、それは安全でなければならないことを意味するが、私はすでに真
ここ<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
に私の任意の負荷を設定し、いくつかのVideoPlayer VCに自分の動画を表示するためのコードとサムネイルジェネレータ関数であるので、それはおそらく、HTTPSリンクありこれらにはいくつか問題がありますか?
import UIKit
import AVKit
import MediaPlayer
class VideoPlayerVC: AVPlayerViewController {
var urlToPlay: String?
override func viewDidLoad() {
super.viewDidLoad()
print("Here is the url ---> \(String(describing: urlToPlay))")
playVideo()
}
private func playVideo() {
guard let urlFromString = urlToPlay else { print("No url to play") ;return }
let url = URL(string: urlFromString)
print("Here is the url to play ---> \(String(describing: url))")
let asset: AVURLAsset = AVURLAsset(url: url!)
let item: AVPlayerItem = AVPlayerItem(asset: asset)
let player: AVPlayer = AVPlayer(playerItem: item)
self.player = player
self.showsPlaybackControls = true
self.player?.play()
}
}
これは私のcellforRow atIndexPath方法は、それがテーブルビュー内のすべてのビデオオブジェクトのために、このエラーがスローされます実行したとき、私は、サムネイルを作る方法です。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "sortedExerciseCell") as? SortedExerciseCell! {
// Do if check for videoURI and imageURI
if selectedExerciseArray[indexPath.row].imageURI != nil {
if let imageURI = URL(string: selectedExerciseArray[indexPath.row].imageURI!) {
print("It's a photo!")
// Using DispatchQueue.global(qos: .background).async loads cells in background
DispatchQueue.global(qos: .background).async {
let data = try? Data(contentsOf: imageURI)
DispatchQueue.main.async {
cell.exerciseImg.image = UIImage(data: data!)
}
}
}
} else {
if let videoURI = URL(string: selectedExerciseArray[indexPath.row].videoURI!) {
print("It's a video!")
print(videoURI)
DispatchQueue.global(qos: .background).async {
DispatchQueue.main.async {
cell.exerciseImg.image = self.thumbnailForVideoAtURL(url: videoURI)
// for every video object the above error is thrown!!!
}
}
}
}
cell.exerciseName.text = selectedExerciseArray[indexPath.row].name
return cell
} else {
return UITableViewCell()
}
}
// Used to just display the video thumbnail in cell, when clicked on will display video as needed
private func thumbnailForVideoAtURL(url: URL) -> UIImage? {
let asset = AVAsset(url: url)
let assetImageGenerator = AVAssetImageGenerator(asset: asset)
do {
print("Doing the video thumbnail from backend")
let imageRef = try assetImageGenerator.copyCGImage(at: CMTimeMake(1, 60) , actualTime: nil)
return UIImage(cgImage: imageRef)
} catch {
print("This is failing for some reason")
print("error")
return nil
}
}
ほとんどは固定またはすることができないiOSの11のバグにそれをチョーキング、私はこれについて、スタックオーバーフロー上の同様の質問を見てきましたが、どれもこの問題を解決する方法についての完全な答えを与えているように見えるんトランスポートセキュリティ(すでに任意の負荷がかかるため、これは問題にはなりません)。他の誰かが動作する可能性のあるアプローチはありますか?
重要な注意 - マイバックエンドの開発者のみが、Webページから動画のURLを表示することができ、他の言葉で、彼はウェブからダウンロードした後にビデオを表示するための基本的なウェブサイトを作る必要があります。私は、これはAWSからのビデオのURLのを処理するための標準的な手順であるのかはわからないが、私はのUIViewControllerがWKUIDelegateに準拠したカスタムの「loadHTMLString」でURLをロードしようとすることを決めた、私はビデオを見たが、同じような状況がどこ三角起こりますビデオが再生できないことを示すスタートボタンが横切っている。私はこの時点で他に何ができるかは分かりません。何か助けていただければ幸いです。
は、ここで私は私のバックエンドから引っ張ってきたリンクのいずれかです。 https://videofitapptestbucket.s3.us-west-2.amazonaws.com/100001427750
実際の動画リンクを投稿するとよいでしょう。 –
私は私のポストを編集した、ここでのURLです:https://videofitapptestbucket.s3.us-west-2.amazonaws.com/100001427750 – Jumpman987
URLは拡張子 –