Я просмотрел все посты и статьи, но еще не решил свою проблему, и я не уверен, почему. У меня есть табличное представление, которое, если часть содержимого является изображением, будет отображать изображение в TableViewCell, в противном случае в нем будет показано видео. Для видео у меня напечатана ссылка, поэтому она есть, и ссылка работает, но по какой-то причине в TableViewCell видео не воспроизводится, и оно просто черное.
Вот код для TableViewCell:
import UIKit
import AVFoundation
class ViewImageCell: UITableViewCell {
var avQueuePlayer : AVQueuePlayer?
var avPlayerLayer : AVPlayerLayer?
let postContentView: UIView = {
let view = UIView()
return view
}()
let contentImageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.layer.masksToBounds = true
imageView.autoresizesSubviews = true
imageView.contentMode = .scaleAspectFit
imageView.image = UIImage(named: "ProfileIcon")
return imageView
}()
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .default, reuseIdentifier: reuseIdentifier)
addSubview(postContentView)
addSubview(contentImageView)
postContentView.anchor(top: self.topAnchor, left: self.leftAnchor, bottom: self.bottomAnchor, right: self.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
contentImageView.anchor(top: self.topAnchor, left: self.leftAnchor, bottom: self.bottomAnchor, right: self.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func addPlayer(for url: URL) {
self.avQueuePlayer = AVQueuePlayer(url: url)
self.avPlayerLayer = AVPlayerLayer(player: self.avQueuePlayer!)
self.avPlayerLayer?.frame = self.postContentView.bounds
self.avPlayerLayer?.fillMode = .both
self.postContentView.layer.addSublayer(self.avPlayerLayer!)
self.avQueuePlayer?.play()
}
func bindData(content: NSDictionary) {
if content[kPICTURE] != nil {
let data = content[kPICTURE] as! String
let picData = NSData(base64Encoded: data, options: [])
if let image = UIImage(data: picData! as Data) {
contentImageView.image = image
} else {
print("There was an error loading the pic")
}
} else {
}
if content[kVIDEO] != nil {
contentImageView.isHidden = true
let videoData = content[kVIDEO] as! String
let url = NSURL(fileURLWithPath: videoData)
addPlayer(for: url as URL)
print("Here is a video")
} else {
//
}
}
}
Вот фрагмент кода для TableView:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: imageCellID, for: indexPath) as! ViewImageCell
if singleContent != nil {
cell.bindData(content: singleContent)
} else {
print("Can't find singleContent")
}
return cell
}
return UITableViewCell()
}
Дайте мне знать, если у вас есть какие-либо вопросы и нужно больше разъяснений. Вся помощь очень ценится.
РЕДАКТИРОВАТЬ: Вот пример типа видео пути, который я использую. Я беру это из моей базы данных Firebase, а не из локального файла в моем проекте.
file: ///private/var/mobile/Containers/Data/PluginKitPlugin/49C0EAA4-9825-4D06-8CFB-6136FF5BCC3C/tmp/trim.AA010490-81F0-43C8-AE8A-105DAF. MOV
Я также получаю код ошибки ниже. Я посмотрел и подумал, что это означает, что файл не существует, но я все еще могу просмотреть этот файл в другом месте, где он воспроизводит видео в другом представлении.
NSURLConnection завершил с ошибкой - код -1100
Здесь путь к видео хранится в базе данных, вообще не используя Firebase Storage.