zoukankan      html  css  js  c++  java
  • 视频播放(iOS开发)

    视频播放

    一.视频播放介绍(5种实现方案)

    1. AVPlayer
      • 优点
        • 可以自定义UI,进行控制
      • 缺点
        • 单纯的播放,没有控制UI,而且如果要显示播放界面,需要借助AVPlayerLayer,添加图层到需要展示的图层上
    2. MPMoviePlayerController
      • 优点
        • 自带播放控制UI,不需要手动添加
      • 缺点
        • 不能自定义UI
        • 只能将此控制器视图添加到其他视图进行展示
        • 此控制器不是视图控制器,不能弹出
    3. MPMoviePlayerViewController
      • 优点
        • 自带播放控制UI,不需要手动添加
        • 此控制器是视图控制器,可以弹出,可以压栈
        • 也可以手动调整视图大小,添加其他视图上
      • 缺点
        • 不能自定义UI
    4. 针对第2/3种情况,在iOS9之后,统一使用AVPlayerViewController
      • 优点
        • 自带播放控制UI,不需要手动添加
        • 此控制器是视图控制器,可以弹出,可以压栈
        • 也可以手动调整视图大小,添加到其他视图上
      • 缺点
        • 不能自定义UI
    5. 第三方框架Vitamio

    二.使用AVPlayer播放远程视频

    1.实现播放功能

    1. 通过远程URL创建AVPlayer
    2. 开始播放
      • [self.player play];
    3. 存在问题
      • 只能播放声音,看不到图像
      • 解决方案:需要借助AVPlayerLayer对象,根据player创建图层,添加到视图上

    2.实现视频显示功能

    1. 根据player对象,创建AVPlayerLayer对象
      • AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    2. 设置图层AVPlayerLayer的大小
      • layer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
    3. 添加到需要展示的视图上即可
      • [self.view.layer addSublayer:layer];

    3.封装专门用于播放的视图

    • 主要封装一些操作的工具条

    备注

    • iOS9.0网络请求(ATS)适配(HTTPS->HTTP)
    • NSAppTransportSecurity
    • NSAllowsArbitraryLoads->true

    三.使用MPMoviePlayerController播放视频

    • 相比于AVPlayer播放,自带一些控制按钮
    • 导入MediaPlayer框架
    • 根据URL创建控制器MPMoviePlayerController
    • 设置播放视图frame,添加到需要展示的视图上
      • 设置播放视图的frame
        • self.moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
      • 设置播放视图控制样式
        • self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
      • 添加播放视图到要显示的视图
        • [self.view addSubview:self.moviePlayer.view];
    • 播放
      • [self.moviePlayer play];
    • 注意事项
      • 此控制器不是视图控制器,不能直接弹出
      • 播放器的播放状态,是通过通知的方式告诉外界

    四.使用MPMoviePlayerViewController播放视频

    • 导入MediaPlayer框架
    • 根据URL创建控制器MPMoviePlayerViewController
    • 直接modal弹出该控制器(或者设置播放视图frame,添加到需要展示的视图上)
      • [self presentViewController:self.playerVC animated:YES completion:nil];
    • 播放
      • [self.playerVC.moviePlayer play];

    五.iOS9.0之后,需要使用AVPlayerViewController

    • 导入框架
      • AVFoundation
      • AVKit
    • 根据URL创建AVPlayer
    • 根据AVPlayer,创建AVPlayerViewController控制器
      • self.playerVC = [[AVPlayerViewController alloc] init];
      • self.playerVC.player = player;
    • 设置播放视图frame,添加到需要展示的视图上
      • 设置播放视图的frame
        • self.playerVC.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
      • 添加播放视图到要显示的视图
        • [self.view addSubview:self.playerVC.view];
      • 或者直接弹出此控制器
        • [self presentViewController:self.playerVC animated:YES completion:nil];
    • 播放
      • [self.playerVC.player play];

    六.Vitamio框架

    • 官网
    • 主要功能
      • Vitamio能够流畅播放720P甚至1080P高清mkv/flv/mp4/mov/ts/rmvb等常见格式的视频
      • 还可以在Android和iOS上跨平台支持mms/rtsp/rtmp/hls(m3u8)等常见的多种视频流媒体协议,包括直播与点播
    • 使用权限
      • 非个人移动应用均需购买Vitamio使用授权
      • 标准免费版仅限于个人开发者使用
    • 使用步骤
      • 导入框架
      • 添加系统依赖库
      • 项目配置
        • TARGETS->Build Settings->Other Linker Flags->"-OjbC"
      • 导入头文件
        • #import "Vitamio.h"
      • 代码实现
        • 获取单例
          • VMediaPlayer.sharedInstance()
        • 设置承载式图,以及代理
          • mMPlayer.setupPlayerWithCarrierView(view,withDelegate:self)
        • 设置数据源
          • mMPlayer.setDataSource(NSURL(string:videoUrl),header:nil)
        • 异步准备视频
          • mMPlayer.prepareAsync()
        • 在代理方法中开始播放(VMediaPlayerDelegate)
    // 当'播放器准备完成'时, 该协议方法被调用, 我们可以在此调用 [player start] 来开始音视频的播放.
    func mediaPlayer(player: VMediaPlayer!, didPrepared arg: AnyObject!) {
        mMPayer.start()
    }
    
    // 当'该音视频播放完毕'时, 该协议方法被调用, 我们可以在此作一些播放器善后操作, 如: 重置播放器, 准备播放下一个音视频等
    func mediaPlayer(player: VMediaPlayer!, playbackComplete arg: AnyObject!) {
        player.reset()
    }
    
    // 如果播放由于某某原因发生了错误, 导致无法正常播放, 该协议方法被调用, 参数 arg 包含了错误原因.
    func mediaPlayer(player: VMediaPlayer!, error arg: AnyObject!) {
        print("nal")
    }
    
    
    	- 暂停播放
    		- mMPlayer.pause()
    	- 停止播放
    		- mMPlayer.reset()
    		- mMPlayer.unSetupPlayer()
    	- 继续播放
    		- mMPlayer.start()
    	- 倍速播放
    		- mMPlayer.setPlaybackSpeed
    	- 播放到指定时间
    		- seekTo
  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/coderwjq/p/6236921.html
Copyright © 2011-2022 走看看