从Swift 3中的API获取AVPlayer中的视频
问题描述:
我可以在AVPlayer中运行本地视频。但我无法从swift 3获取JSON视频。我搜索了它,但在Swift 3中找不到合适的解决方案。如何在Swift 3中从JSON获取视频?我是Swift的初学者。从Swift 3中的API获取AVPlayer中的视频
我有JSON为:
{
"status": "Success",
"course_summary": "<p>Laravel is one of the most popular PHP frameworks </p>",
"course_video": "course.mkv"
}
代码:
import UIKit
import AVFoundation
import AVKit
import Alamofire
class CourseSchedule: UIViewController {
var playerController = AVPlayerViewController()
var player:AVPlayer?
var dictDataContent:NSDictionary = NSDictionary()
var strd : NSString?
var dictData:NSArray = NSArray()
var appDictionary: String?
@IBOutlet weak var courseSummary: UITextView!
@IBOutlet var button: UIButton!
@IBOutlet var videoPreviewLayer: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let def = self.dictDataContent.value(forKey: "course_summary") as! String!
let htmlData = NSString(string: def!).data(using: String.Encoding.unicode.rawValue)
let attributedString = try! NSAttributedString(data: htmlData!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
courseSummary.attributedText = attributedString
courseSummary.textColor = UIColor.white
courseSummary.font = UIFont(name: "Palatino", size: 14)
//For local video to play in AVPlayer.
let videoString = Bundle.main.path(forResource: "Working-Space", ofType: ".mp4")
if let path = videoString {
let url = NSURL(fileURLWithPath: path)
let item = AVPlayerItem(url: url as URL)
self.player = AVPlayer(playerItem: item)
self.playerController = AVPlayerViewController()
self.playerController.player = self.player
playerController.view.frame = videoPreviewLayer.frame
self.addChildViewController(playerController)
self.videoPreviewLayer.addSubview(playerController.view)
playerController.showsPlaybackControls = false
self.playerController.player?.play()
}
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
self.player?.seek(to: kCMTimeZero)
self.player?.play()
}
})
button.layer.cornerRadius = 5
}
}
//HOMEVC
import UIKit
import Alamofire
class HomeVC: UIViewController {
@IBOutlet var test: UIView!
var strid : NSString?
var strd : NSString?
var dictData:NSDictionary = NSDictionary()
var strd2 : NSString?
override func viewDidLoad() {
super.viewDidLoad()
self.setupPages()
}
func setupPages() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var controllerArray: [UIViewController] = []
let strinDuration:NSString = NSString(format:"http://rillmark.academy/api/rillmark-academy/course/course-content-detail?id=%@",strid!) as String as String as NSString
print("strid",strid!)
let collectionviewone: String = strinDuration as String
Alamofire.request(collectionviewone, method: .get, parameters: nil, encoding: JSONEncoding.default)
.responseJSON { response in
debugPrint(response.result)
if let JSON = response.result.value{
self.dictData = (JSON as AnyObject) as! NSDictionary
print("self.dictData",self.dictData)
let firstVC = storyboard.instantiateViewController(withIdentifier: "CourseContentTable") as! CourseContentTable
firstVC.title = "Course Content"
firstVC.dictDataContent = self.dictData
}
答
如果你使用JSON你不会实际发送视频。 JSON本质上是关键:价值数据。您可以让JSON发送视频数据或链接以从中下载视频。不过目前它的外观您有:
{"course_video":"course.mkv"}
换句话说,你有类型:
{String:String}
我会建议通过一个链接通过JSON,然后下载相应的视频。看看Alamofire这对HTTP请求和处理你的下载非常有用。一旦你有了视频数据,你可以使用AVPlayer播放它。
现在,我也包含了下一个视图控制器的内容。在这里,我使用Alamofire来获取API。我上面写的有关视频的JSON是虚拟的。这是为了保护隐私。现在,我的问题是如何在Swift 3中使用AVPlayer播放视频? – Tamannah