播放器RTMP功能的使用

概述

播放器的运行、功能使用、代理回调的介绍,与RTMP的设置

使用指南

  1. 引入框架。
    //框架引入
    #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
  2. 设置播放器日志。
    //打开播放器日志  建议为IMSLinkVisualMediaLogInfo 
    [IMSLinkVisualPlayerViewController setLogLevel:IMSLinkVisualMediaLogInfo];
  3. 创建播放器。
         //创建播放器
        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; 
  4. 设置播放源。
    • 直播播放器
          //设置参数 rtmpPath rtmp地址
          //needEncrypt false 不需要加密,参数iv和key都传nil
          [player setDataSource_Live:rtmpPath
                         needEncrypt:needEncrypt
                                  iv:iv
                                 key:key];
    • TF卡点播播放器
          //设置参数 rtmpPath rtmp地址
          //needEncrypt false 不需要加密,参数iv和key都传nil
          [player setDataSource_Vod:rtmpPath
                         needEncrypt:needEncrypt
                                  iv:iv
                                 key:key];
  5. 设置并使用播放器功能。
    • 开始播放
      #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>
      
      // 暂停播放
      [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];
      //获取视频截图
      UIImage *image = [hlsPlayer videoSnapshot];
      								
    • 视频截图
      #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
      
      //获取视频截图
      UIImage *image = [self.player videoSnapshot];
      //获取视频截图
      UIImage *image = [hlsPlayer videoSnapshot];
      								
    • 边录边播 (不支持hlsPlayer)
      #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>
      /**
       //设置播放器缓存(缓存越大,延迟越高),一帧缓存延迟40ms,默认为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;
  6. 使用播放器。
    • 直播播放器
          //设置参数 rtmpPath rtmp地址
          //needEncrypt false 不需要加密,参数iv和key都传nil
          [player setDataSource_Live:rtmpPath
                         needEncrypt:needEncrypt
                                  iv:iv
                                 key:key];
    • TF卡点播播放器
          //设置参数 rtmpPath rtmp地址
          //needEncrypt false 不需要加密,参数iv和key都传nil
          [player setDataSource_Vod:rtmpPath
                         needEncrypt:needEncrypt
                                  iv:iv
                                 key:key];
  7. 查看播放器状态。
    /// 播放器状态
    typedef NS_ENUM(NSUInteger,IMSLinkVisualPlayerState){
        /// 空闲
        IMSLinkVisualPlayerStateIdle = 0,
        /// 缓冲中
        IMSLinkVisualPlayerStateBuffering = 2,
        /// 开始播放
        IMSLinkVisualPlayerStateStartPlay = 4,
        /// 暂停播放
        IMSLinkVisualPlayerStatePausePlay = 8,
        /// 切换到后台
        IMSLinkVisualPlayerStateBackground = 16,
    };
  8. 监听回调结果。
    @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