HLS播放器

物联网视频服务,在iOS应用端针对视频播放功能,开发了支持iOS播放协议的云端HLS播放器。本文介绍HLS播放器的基本信息和使用方法。

背景信息

HLS播放协议类型播放器的基本信息和功能列表,请参见播放器概述

使用指南

  1. 创建云端HLS播放器。

         //创建播放器
        IMSLinkVisualPlayerViewController *player = [[IMSLinkVisualPlayerViewController alloc] init];
        //因为播放器为viewController,所以addChildViewController
        [self addChildViewController:player];
        //设置播放器frame
        player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        player.view.frame = self.view.bounds;
        //添加播放器view到指定位置
        [self.view insertSubview:player.view atIndex:0];
        //播放器代理
        player.delegate = self; 
  2. 设置云端HLS参数。

         //设置参数 HLSPath http***.m3u8 seekTime的单位为秒
        [player setDataSource_HLS:hlsPath 
                         seekTime:seekTime];
  3. 设置并使用播放器功能。

    • 开始播放

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 开始播放
      [self.player start];
    • 静音播放器

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      //播放器静音,对讲不播放接收到的声音通过mute实现
      self.player.mute = true;
    • 停止播放

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 停止播放,结束播放器
      [self.player stop];
    • 直播重连

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      //自动重连,默认0次。 
      //自动重连只支持直播功能
      self.player.reconnect = 10;
    • 变声设置

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      /*
       变声处理参数仅支持设置为0和1, 默认为0
       0表示不变声;1表示中年男子声音 
       如需要实现自定义变声,需设置为0,然后处理对讲声音回调
       **/
      self.player.voiceChangeType = 0;
    • 设置

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 停止播放,结束播放器
      [self.player stop];
    • (仅支持设备录像点播播放器)暂停播放

      说明

      下文简称设备录像点播播放器为点播播放器。

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 暂停播放
      [self.player pause];
    • (仅支持点播播放器)暂停播放

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 暂停播放
      [self.player pause];
    • (仅支持点播播放器)恢复播放

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 恢复播放
      [self.player restore];
    • (仅支持点播播放器)倍速播放

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      // 倍速播放
      self.player.playSpeed = PlaySpeed_NORMAL;
    • 视频截图

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      //获取视频截图
      UIImage *image = [self.player videoSnapshot];                            
    • (不支持云端HLS录像播放器)边录边播

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      - (IBAction)recordVideoButtonClick:(UIButton *)sender {
          sender.selected = !sender.selected;
          NSString *tmpPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.mp4"];
          if (sender.selected) {
              [self.player startRecordVideoWithfilePath:tmpPath];
          } else {
              [self.player stopRecordVideo];
          }
      }
    • 设置播放器缓存

      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      /**
       //设置播放器缓存(缓存越大,延迟越高),一帧缓存延迟40毫秒,默认为5帧
       @param buffer 缓存大小为0~16帧
       */
      [self.player setDisplyBuffer:10];
    • 设置播放器渲染模式

      /// 播放器渲染模式
      typedef NS_ENUM(NSUInteger, IMSLinkVisualPlayerDisplayMode){
          /// 应用端开发者对YUV数据不可见,完全由SDK处理和渲染,默认使用这个模式
          IMSLinkVisualPlayerDisplayMode_SDK,
          /// 允许应用端开发者对YUV数据进行二次加工,然后再还给SDK渲染
          IMSLinkVisualPlayerDisplayMode_Client_SDK,
          /// YUV数据完全交由应用端开发者处理和渲染
          IMSLinkVisualPlayerDisplayMode_Client
      };
      
      /// 设置播放器渲染模式,默认为IMSLinkVisualPlayerDisplayMode_SDK模式
      @property (assign, nonatomic) IMSLinkVisualPlayerDisplayMode lvDisplayMode;
      
      /**
       直播、点播的共用代理接口
       视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去
       @see IMSLinkVisualPlayerViewController
       @param frame 视频帧YUV数据
       */
      - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame;
  4. 查看播放器状态。

    /// 播放器状态
    typedef NS_ENUM(NSUInteger,IMSLinkVisualPlayerState){
        /// 空闲
        IMSLinkVisualPlayerStateIdle = 0,
        /// 缓冲中
        IMSLinkVisualPlayerStateBuffering = 2,
        /// 开始播放
        IMSLinkVisualPlayerStateStartPlay = 4,
        /// 暂停播放
        IMSLinkVisualPlayerStatePausePlay = 8,
        /// 切换到后台
        IMSLinkVisualPlayerStateBackground = 16,
    };
  5. 监听回调结果。

    @protocol IMSLinkVisualDelegate <NSObject>
    
    /*------------------直播、点播共用代理接口---------------------*/
    
    /**
     直播、点播 共用接口
     连接成功
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualConnect:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     直播、点播 共用接口
     准备完成进入播放状态
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualReady:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     直播、点播 共用接口
     播放成功停止(正常停止)
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualStop:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     直播、点播 共用接口
     连接错误回调 (所有直播点播错误,都通过这个代理回调)
     @see IMSLinkVisualPlayerViewController
     @param error 错误信息 IMSLinkVisualPlayerError枚举 对应 error.code
     */
    - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player errorOccurred:(NSError *_Nullable)error;
    
    /**
     直播、点播 共用接口
     视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去
     @see IMSLinkVisualPlayerViewController
     @param frame 视频帧YUV数据
     */
    - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame;
    
    
    /*---------------------点播独占代理接口-----------------------*/
    
    /**
     点播
     seek成功完成
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualReplaySeekReady:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     点播
     恢复播放成功完成
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualRestore:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     点播
     暂停播放成功完成
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualPause:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     点播
     播放到结尾的回调
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualPlayEnd:(IMSLinkVisualPlayerViewController *_Nullable)player;
    
    /**
     点播
     当前时间回调
     @see IMSLinkVisualPlayerViewController
     */
    - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player
                 currentTime:(NSInteger)currentTime;
    
    /// SEI回调接口
    /// @param player  播放器
    /// @param data  回调二进制数据 data.length为数据长度
    /// @param timeStamp  时间戳
    - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player
                      buffer:(NSData*_Nullable)data
                   timeStamp:(NSInteger)timeStamp;
    
    @end