视频播放

实现方案

  1. AVPlayer

    • 优点: 可以自定义UI, 进行控制
    • 缺点: 单纯的播放, 没有控制UI, 而且如果要显示播放界面, 需要借助AVPlayerLayer, 添加图层到需要展示的图层上
  2. MPMoviePlayerController

    • 优点: 自带的播放控制UI, 不需要手动添加
    • 缺点: 不能自定义UI 只能将此控制器视图添加到其他视图进行展示 此控制器不是视图控制器, 不能弹出
  3. MPMoviePlayerViewController

    • 优点: 自带的播放控制UI, 不需要手动添加 此控制器是视图控制器, 可以弹出, 可以压栈 也可以手动调整视图大小, 添加到其他视图上
    • 缺点: 不能自定义UI
  4. 针对于第2种和第3种实现方案, 在iOS9.0之后, 统一使用AVPlayerViewController

    • 优点: 自带的播放控制UI, 不需要手动添加 此控制器是视图控制器, 可以弹出, 可以压栈 也可以手动调整视图大小, 添加到其他视图上
    • 缺点: 不能自定义UI
  5. 第三方框架vitamio

使用AVPlayer 播放远程视频

  • 通过远程URL创建AVPlayer对象
var player:AVPlayer? = {
    let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
    return AVPlayer(url: url!)
}()
  • 开始播放
player.play();
  • 存在问题

只能播放声音, 看不到图像

解决方案: 需要借助AVPlayerLayer对象, 根据player创建图层, 添加到视图上

  • 实现视频显示功能

1.根据player对象, 创建 AVPlayerLayer 对象

let layer = AVPlayerLayer(player: player!)

2.设置图层 AVPlayerLayer 的大小

layer.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 200)

3.添加到需要展示的视图上即可

view.layer.addSublayer(layer)

备注 iOS9.0 网络请求适配 (HTTPS-->HTTP)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

使用MPMoviePlayerController播放视频

相比于AVPlayer播放, 自带一些控制按钮,但iOS9.0之后已经废弃了

  1. 导入框架
import MediaPlayer

1.根据URL, 创建控制器 MPMoviePlayerController

var mediaPlayer:MPMoviePlayerController? = {
    let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
    let mediaPlayer = MPMoviePlayerController(contentURL: url)
    return mediaPlayer
}()

2.设置播放视图frame, 添加到需要展示的视图上

// 设置播放视图的frame
mediaPlayer?.view.frame = view.bounds

// 设置播放视图控制样式
mediaPlayer?.controlStyle = .fullscreen

// 添加播放视图到要显示的视图
view.addSubview(mediaPlayer!.view)

3.播放

mediaPlayer?.play()

4.注意事项: 此控制器不是视图控制器, 不能直接弹出

播放器的播放状态, 是通过通知的方式告诉外界

使用MPMoviePlayerViewController播放视频

1.导入框架

import MediaPlayer

2.根据URL, 创建控制器 MPMoviePlayerViewController

var movieVC:MPMoviePlayerViewController? = {
let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
let movieVC = MPMoviePlayerViewController(contentURL: url)
return movieVC
}()

3.直接模态弹出该控制器(或者: 设置播放视图frame, 添加到需要展示的视图上)

present(movieVC!, animated: true) {
    self.movieVC?.moviePlayer.play()
}

4.播放

self.movieVC?.moviePlayer.play()

iOS9.0之后, 需要使用AVPlayerViewController

1.导入框架

import AVFoundation
import AVKit

2.根据URL创建AVPlayer

var player:AVPlayer? = {
    let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
    return AVPlayer.init(url:url!)
}()

3.根据AVPlayer, 创建AVPlayerViewController控制器

var playerVC:AVPlayerViewController = AVPlayerViewController()
playerVC.player = player

4.设置播放视图frame, 添加到需要展示的视图上

// 设置播放视图的frame
playerVC.view.frame = view.bounds

// 添加播放视图到要显示的视图
view.addSubview(playerVC.view)

// 或者直接弹出此控制器
present(playerVC, animated: true) {
    self.player?.play()
}

5.播放

self.player?.play()

results matching ""

    No results matching ""