先看看效果:
播放本地视频:
guard let file = Bundle.main.path(forResource: "radio", ofType: ".mp4") else {
NSLog("No found File")
return
}
videoView?.setVideoData(filePath: file)
在线视频:
DispatchQueue.main.async(execute: {
self.videoView?.setVideoData(url: "http://bos.nj.bpc.baidu.com/tieba-smallvideo/11772_3c435014fb2dd9a5fd56a57cc369f6a0.mp4")
})
竖屏效果
横屏效果
自定义View,目的是将一些功能做整体封装,方便使用。
自定义View,首先要了解下View加载显示过程中的一些函数,了解它们的调用时序,方便在封装时可以依附这个时序做初始化跟释放等工作:
//即将添加子视图时调用
override func willRemoveSubview(_ subview: UIView) {
}
//当子视图添加完成是调用
override func didAddSubview(_ subview: UIView) {
}
//视图附属的Window对象即将改变
override func willMove(toWindow newWindow: UIWindow?) {
}
//视图附属的Window对象已经改变
override func didMoveToWindow() {
}
//视图附属的父View即将改变
override func willMove(toSuperview newSuperview: UIView?) {
}
//视图附属的父View已经改变
override func didMoveToSuperview() {
}
使用AVPlayer播放多媒体,需要了解以下几个类:
AVPlayer:媒体播放控制的组件
AVPlayerItem: 提供当前播放媒体文件的信息和状态
AVPlayerLayer: 做视频现实用
先自定义一个类VideoView,添加三个属性,调整get set方法使三个对象关联起来:
import UIKit
import AVKit
import AVFoundation
class JVideoView: UIView {
var videoLayer: AVPlayerLayer? = nil
var playerItem: AVPlayerItem? {
set {
self.player?.replaceCurrentItem(with: newValue)
}
get {
return self.player?.currentItem
}
}
var player : AVPlayer? {
get {
return self.videoLayer?.player
}
set {
self.videoLayer?.player = newValue
}
}
}
添加属性初始化