UITableViewCell中的AVPlayer是黑色的,无法查看

问题描述 投票:2回答:1

我浏览了每篇文章和文章,但尚未解决我的问题,我不确定为什么。我有一个表格视图,如果内容是图像,它将在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()
}

让我知道您是否有任何疑问,需要更多说明。非常感谢所有帮助。

swift uitableview avplayer avplayerlayer
1个回答
0
投票

如果要在Webview中播放视频URL,请使用以下代码:(根据您的要求管理代码)

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) //remove this line and add below line

        self.PlayVideoInWEbView(videoData)
        print("Here is a video")

    } else {
        //
    }

}

func PlayVideoInWEbView(_ videoURL : String)
{
    let myWebView:UIWebView = UIWebView(frame: CGRect(x: 20, y: 20, width: self.viewCell.frame.width, height: 200))



    myWebView.delegate = self

    let myURL = URL(string: videoURL)
    let myURLRequest:URLRequest = URLRequest(url: myURL!)
    myWebView.loadRequest(myURLRequest)

    self.viewCell.addSubview(myWebView)

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