Ios AVPLayer从Firebase数据库中的URL播放视频

Ios AVPLayer从Firebase数据库中的URL播放视频,ios,database,firebase,avplayer,Ios,Database,Firebase,Avplayer,我有一个原型单元格,可以自动从Firebase数据库中提取文本。我想把视频也融入其中。如何使用AVPlayer从FireBase数据库中的URL播放视频。我希望它尽可能自动化 我不是一个经验丰富的开发人员,在这个过程中遇到了困难,所以请提供“婴儿级”的答案 这是从firebase提取的单元的代码 // // FirebaseVidoes.swift // Faces of the Holocaust Photographic History // // Created by

我有一个原型单元格,可以自动从Firebase数据库中提取文本。我想把视频也融入其中。如何使用AVPlayer从FireBase数据库中的URL播放视频。我希望它尽可能自动化

我不是一个经验丰富的开发人员,在这个过程中遇到了困难,所以请提供“婴儿级”的答案

这是从firebase提取的单元的代码

        //
//  FirebaseVidoes.swift
//  Faces of the Holocaust Photographic History
//
//  Created by New User on 8/25/17.
//  Copyright © 2017 New User. All rights reserved.
//

import UIKit
import Firebase
import AVKit
import AVFoundation

struct postStruct {
let title : String!
let message : String!
//let image : UIImage!
}


class FirebaseVidoes: UITableViewController {


var posts = [postStruct]()



override func viewDidLoad() {
    super.viewDidLoad()

tableView.backgroundView = UIImageView(image: UIImage(named: 
"polandBackgroundBlur.jpg"))


    let databaseRef = Database.database().reference()


databaseRef.child("Posts").queryOrderedByKey().observe(.childAdded, 
with: {

        snapshot in

        let snapshotValue = snapshot.value as? NSDictionary
        let title = snapshotValue?["title"] as? String
        let message = snapshotValue?["message"] as? String
        //let image = snapshotValue?["image"] as? UIImage

        self.posts.insert(postStruct(title: title, message: message) 
, at: 0)
        self.tableView.reloadData()


    })


    //post()
    // Do any additional setup after loading the view.
}


func post(){

    let title = "Title"
    let message = "Message"


    let post : [String : AnyObject] = ["title": title as AnyObject,
                                        "message": message as 
AnyObject]


    let databaseRef = Database.database().reference()

    databaseRef.child("Posts").childByAutoId().setValue(post)


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


override func tableView(_ tableView: UITableView, 
numberOfRowsInSection section: Int) -> Int {

    return posts.count

}



override func tableView(_ tableView: UITableView, cellForRowAt 
indexPath: IndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

    let label1 =  cell?.viewWithTag(1) as! UILabel
        label1.text = posts[indexPath.row].title

    let label2 = cell?.viewWithTag(2) as! UILabel
        label2.text = posts[indexPath.row].message

    //let image1 = cell?.viewWithTag(3) as! UIImage
        //image1.UIimage = posts[indexPath.row].image



    return cell!

}




}
以下是AVPlayer代码:

//  VideoTestViewController.swift
//  Faces of the Holocaust Photographic History
//
//  Created by New User on 8/26/17.
//  Copyright © 2017 New User. All rights reserved.
//

import UIKit
import AVKit
import AVFoundation


class VideoTest: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}
@IBAction func watchVideoDidClick(_ sender: Any) {

    playExternalVideo()
}

let videoURL = "SOMEVIDEOURL"

func playExternalVideo(){

    let videoURL = NSURL(string: self.videoURL)!

    let player = AVPlayer(url: videoURL as URL)
    let playerViewController = AVPlayerViewController()

    playerViewController.player = player

    self.present(playerViewController, animated: true) {
        () -> Void in
        playerViewController.player!.play()
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}
如何合并这些内容以获得自动填充到单元格中的视频

编辑这里是修改后的代码

   //Code Beginning    
   import UIKit
   import Firebase
   import AVKit
   import AVFoundation

   struct postStruct {
let title : String!
let message : String!
let url : URL!
//let image : UIImage!
}

类FirebaseVidoes:UITableViewController{

var posts = [postStruct]()



override func viewDidLoad() {
    super.viewDidLoad()

    tableView.backgroundView = UIImageView(image: UIImage(named: "polandBackgroundBlur.jpg"))


    let databaseRef = Database.database().reference()

    databaseRef.child("Posts").queryOrderedByKey().observe(.childAdded, with: {

        snapshot in

        let snapshotValue = snapshot.value as? NSDictionary
        let title = snapshotValue?["title"] as? String
        let message = snapshotValue?["message"] as? String
        let url = snapshotValue?["url"] as? URL
        //let image = snapshotValue?["image"] as? UIImage

        self.posts.insert(postStruct(title: title, message: message, url: url) , at: 0)
        self.tableView.reloadData()




    })


    //post()
    // Do any additional setup after loading the view.
}
/*func post(){


}

尝试在新屏幕上显示:

  • 导入:导入AVKit,导入AVFoundation
  • 然后当用户点击单元格时(在TableView的didSelectRow方法中)

  • 让它在牢房里玩起来更难。正如你所评论的,这对你现在来说是可行的

    编辑:在评论中回答您的问题: 这应该很容易。我看你已经有了:

    self.posts.insert(postStruct(title: title, message: message), at: 0)
    
    这意味着您正在将新的
    Post
    对象添加到
    posts
    数组中。然后重新加载数据

    现在,我猜你的
    snapshotValue
    应该有一个URL,对吗?如果你说你需要播放视频,那么URL来自哪里?所以我猜快照有这个URL。所以你需要向你的Post对象添加一个新属性,即URL

    所以现在每个单元格都会包含一个带有url的Post对象。当用户点击它时,您只需播放该Post的url。清楚了吗

    编辑2: 只要这样做:

    let url=posts[indexPath.row].url

    编辑3:

  • 将第44行更改为:
  • 让urlString=snapshotValue?[“url”]作为?字符串

    let url=url(string:urlString!)

  • 将didSelect方法更改为:
    重写func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath)

  • 请尝试在新屏幕上显示:

  • 导入:导入AVKit,导入AVFoundation
  • 然后当用户点击单元格时(在TableView的didSelectRow方法中)

  • 让它在牢房里玩起来更难。正如你所评论的,这对你现在来说是可行的

    编辑:在评论中回答您的问题: 这应该很容易。我看你已经有了:

    self.posts.insert(postStruct(title: title, message: message), at: 0)
    
    这意味着您正在将新的
    Post
    对象添加到
    posts
    数组中。然后重新加载数据

    现在,我猜你的
    snapshotValue
    应该有一个URL,对吗?如果你说你需要播放视频,那么URL来自哪里?所以我猜快照有这个URL。所以你需要向你的Post对象添加一个新属性,即URL

    所以现在每个单元格都会包含一个带有url的Post对象。当用户点击它时,您只需播放该Post的url。清楚了吗

    编辑2: 只要这样做:

    let url=posts[indexPath.row].url

    编辑3:

  • 将第44行更改为:
  • 让urlString=snapshotValue?[“url”]作为?字符串

    let url=url(string:urlString!)

  • 将didSelect方法更改为:
    重写func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath)

  • 你的意思是你需要在手机内播放视频?或者你想让他们在单独的屏幕上播放AVPlayer控件,如停止、暂停、音量等?这两种方式都可以。我只是不知道如何开始。似乎有一个打开到新视图的播放按钮会更容易,但我不知道。你的意思是你需要在手机内播放视频?或者你想让他们在单独的屏幕上播放AVPlayer控件,如停止、暂停、音量等?这对我来说都没问题。我只是不知道如何开始。似乎打开一个播放按钮进入新视图会更容易,但我不知道。对。我可以播放视频。什么我很难将该功能添加到Firebase方面。如何使其自动填充原型单元中的视频?在我的回答中回答了您的问题:请参阅编辑部分。有意义。Thanks@WP如果这个答案对你有帮助,并且你认为它是正确的,并且解决了你的问题,请接受它。让我们保持沉默ow's culture:)是的。我可以播放视频。我很难将该功能添加到Firebase方面。如何使其自动填充原型单元格中的视频?在我的回答中回答了您的问题:请参阅编辑部分。有意义。Thanks@WP如果答案对你有帮助,如果你认为是正确的,请接受ect并解决您的问题。让我们保持stackoverflow的文化:)
    self.posts.insert(postStruct(title: title, message: message), at: 0)