Video SDK for UE4 典型场景实现方法

实现视频通话

场景概览

游密Video SDK可以实现一对一、一对多、多对多的实时通话功能;在相同频道内的用户可自由发言和收看视频画面;适用于实时音视频通话、多人语音视频群聊等场景。

功能列表

主要功能 功能描述
登录房间 用户可以自由登录房间
自由语音视频互动 用户可以自由加入或退出语音视频互动

相关接口

BindObserver : 绑定回调对象 UnbindObserver : 解绑回调对象 Start : 初始化SDK SetVideoFrameRawCbEnabled : 设置视频编码方式, 需要在加入房间前设置 JoinChannelSingleMode : 加入房间 SetVideoLocalResolution : 设置本地采样大小 SetVideoNetResolution : 设置远端采样大小 StartCapture : 开始摄像头采集 SetMicrophoneMute : 设置麦克风状态 SetSpeakerMute : 设置扬声器状态

1.继承YoumeVideoObserver接口类, 绑定回调对象

2.调用Start进行SDK初始化

3.实现YoumeVideoObserver的OnEvent接口监听SDK回调事件

4.初始化返回INIT_OK时调用SetVideoFrameRawCbEnabled传入true

5.调用JoinChannelSingleMode加入频道

6.返回JOIN_OK后设置SetVideoLocalResolution, SetVideoNetResolution采样大小

7.调用StartCapture, 调用SetMicrophoneMute与SetSpeakerMute, 都传入false

8.等待OnUserTextureUpdate和OnMixTextureUpdate接口回调,配置Texture到Imgae的材质

混合(本地)采样回调

OnMixTextureUpdate 混合或者本地摄像机采集的数据渲染的贴图

远端采样回调

OnUserTextureUpdate 频道内其他玩家采集的视频数据渲染的贴图

采样图像回到使用方式

创建User Interface类型的材质来渲染贴图, 并且把贴图声明为变量

把材质赋予到Image的笔刷上

回调数据时直接把OutTex赋予到材质里的贴图变量即可渲染

10.实现视频通话

服务器录制(服务器接口RESTAPI)

场景概览

游密支持服务器录制,将语音视频通话或共享画面进行实时录制保存,提供给更多的人在方便的时间观看或回溯。

开启服务端录制

设置开启服务端录制某频道某用户的视频流或者屏幕共享流,当客户端用户加入频道开启屏幕共享成功后,调用set_media_recod_param接口,设置某频道视频录或共享流录制

  • 请求URL
    https://api.youme.im/v2/im/set_media_recod_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • header

    Content-Type: application/json
  • body
    {
    "RoomID":"123456",
    "UserId":"youme_01",
    "Mode":1,
    "VoiceType":2
    }

RoomID: 游戏频道ID,字符串,必选字段 UserId: 用户ID,字符串,可选字段(录制共享流情况下不需要传userid) Mode: 模式,整型,0:默认模式(相当于恢复录制),1:长时间录制模式,可选字段,UserId必须为空,长时间录制模式表示第一次开启录制 VoiceType: 声音合流模式,整型,0:默认模式(声音与视频流合流),2:共享流模式(声音与共享流合流),可选字段:

  • 响应
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

注: appkey:在游密通信云官网注册账号时默认生成的的appkey curtime:当前UTC时间戳,从1970年1月1日0点0分0秒开始到现在的秒数(string类型)。 checksum:sha1(appsecret + restapikey+curtime),三个参数拼接的字符串,进行sha1计算,转化成16进制字符(string,小写), 其中restapikey和appsecret可在游密后台进行查看

关闭服务端录制

设置关闭服务端录制某频道某用户的视频流或者屏幕共享流,当客户端用户关闭屏幕共享之前,调用del_media_recod_param接口,设置某频道视频录或共享流录制;

  • 请求URL
    https://api.youme.im/v2/im/del_media_recod_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • header

    Content-Type: application/json
  • body
    {
    "RoomID":"123456",
    "UserId": "youme_01",
    "Mode": 1
    }

RoomID: 游戏频道ID,字符串,必选字段 UserId: 用户ID,字符串,可选字段(录制共享流情况下不需要传userid) Mode: 模式,整型,0:默认模式(相当于恢复录制),1:长时间录制模式,可选字段,UserId必须为空,长时间录制模式表示第一次开启录制

  • 响应
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

获取房间录制信息

录制结束后可以获取房间录制信息,并获取录制的id号,用于查看单个录制流的详细信息,可调用get_media_recod_infos接口

  • 请求URL
    https://api.youme.im/v2/im/get_media_recod_infos?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • header

    Content-Type: application/json
  • body
    {
    "RoomIDs":["123456", "123457"]
    }

RoomIDs: 多个频道ID,字符串数组,必选字段

  • 响应
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : "",
    "MediaRecord" : [
      {
         "AppID" : 214,
         "BackgroundRecordStatus" : 2,
         "EndTime" : 1599642533,
         "RecordID" : 13,
         "RecordStatus" : 4,
         "RoomID" : "1234596",
         "StartTime" : 1599642514
      },
      {
         "AppID" : 214,
         "BackgroundRecordStatus" : 2,
         "EndTime" : 1599641917,
         "RecordID" : 9,
         "RecordStatus" : 2,
         "RoomID" : "1234596",
         "StartTime" : 1599641905
      }
    ]
    }

    响应是否获取成功: "RecordID": 会议录制的id号 "AppID": 会议录制的app id "RoomID": 会议录制的房间id "RecordStatus": 会议录制的状态,1:录制中 2:录制结束 3:无效录制 4:录制发布 "BackgroundRecordStatus": 服务器会议录制的状态,1:录制中 2:录制结束 "StartTime": 会议录制开始时间 "EndTime": 会议录制结束时间

获取录制的详细信息(视频文件)

获取到"RecordID"即会议录制的id号后,可用于查看单个录制流的详细信息。调用get_media_recod_info接口,获取到视频文件。

  • 请求URL
    https://api.youme.im/v2/im/get_media_recod_info?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • header

    Content-Type: application/json
  • body
    {
    "RecordID": 9
    }

RoomID: 游戏频道ID,字符串,必选字段 UserID: 游戏用户ID,字符串,必选字段 DstUrl: 单路rtmp流目的url,字符串,必选字段

  • 响应
    {
    "ActionStatus" : "OK",
    "AppID" : 214,
    "BackgroundRecordStatus" : 2,
    "EndTime" : 1599641917,
    "ErrorCode" : 0,
    "ErrorInfo" : "",
    "MediaFiles" : [
      {
         "EndTime" : 1599641915,
         "FileDownloadUrl" : "http://test3download.youme.im/media_file/214_1234596_an947112_1599641805_1599641915_0.mp4",
         "Format" : "mp4",
         "StartTime" : 1599641805,
         "StreamID" : 0,
         "UserID" : "an947112"
      },
      {
         "EndTime" : 1599641915,
         "FileDownloadUrl" : "http://test3download.youme.im/media_file/214_1234596_an198617_1599641805_1599641915_0.mp4",
         "Format" : "mp4",
         "StartTime" : 1599641805,
         "StreamID" : 0,
         "UserID" : "an198617"
      }
    ],
    "RecordID" : 9,
    "RecordStatus" : 2,
    "RoomID" : "1234596",
    "StartTime" : 1599641905,
    "SubtitleFiles" : [
      {
         "EndTime" : 1599641915,
         "FileDownloadUrl" : "http://test3download.youme.im/subtitle_file/1599641805.srt",
         "Format" : "srt",
         "StartTime" : 1599641805,
         "UserIdMapDownloadUrl" : "http://test3download.youme.im/subtitle_file/1599641805.json"
      }
    ]
    }

    响应是否获取成功: "RecordID": 会议录制的id号 "AppID": 会议录制的app id "RoomID": 会议录制的房间id "RecordStatus": 会议录制的状态,1:录制中 2:录制结束 3:无效录制 4:录制发布 "BackgroundRecordStatus": 服务器会议录制的状态,1:录制中 2:录制结束 "StartTime": 会议录制开始时间 "EndTime": 会议录制结束时间 "MediaFiles": 会议录制相关的媒体文件,如mp4 "MediaFiles[].UserID": 媒体文件关联的user id "MediaFiles[].Format": 媒体文件关联的文件格式, mp4 "MediaFiles[].StreamID": 媒体文件关联的流id, 0:默认 2:共享 "MediaFiles[].FileDownloadUrl": 媒体文件关联的文件下载路径 "MediaFiles[].StartTime": 媒体文件开始时间 "MediaFiles[].StartTime": 媒体文件结束时间 "SubtitleFiles": 会议录制相关的字幕文件,如srt "SubtitleFiles[].Format": 字幕文件格式,srt "SubtitleFiles[].FileDownloadUrl": 字幕文件下载路径 "SubtitleFiles[].UserIdMapDownloadUrl": 字幕文件userid映射文件下载路径,json格式 "SubtitleFiles[].StartTime": 字幕文件开始时间 "SubtitleFiles[].EndTime": 字幕文件结束时间

旁路直播(服务器接口RESTAPI)

场景概览

游密支持CDN旁路直播,实现将音视频流推送至第三方CDN平台,从而观众可以方便快捷地通过接入H5观看CDN直播。

开启单路rtmp服务端推流

开启音视频通讯特定频道特定人员的服务端RTMP旁路推流功能,建议主播在客户端加入直播频道成功后,调用set_single_rtmp_param接口,设置某频道的某用户单路RTMP推流。

  • 请求URL
    https://api.youme.im/v2/im/set_single_rtmp_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • header

    Content-Type: application/json
  • body
    {
    "RoomID":"123456",
    "UserID":"ym_jason",
    "DstUrl":"rtmp://10.10.102.205:1935/hls/111"
    }

RoomID: 游戏频道ID,字符串,必选字段 UserID: 游戏用户ID,字符串,必选字段 DstUrl: 单路rtmp流目的url,字符串,必选字段

  • 响应
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

注: appkey:在游密通信云官网注册账号时默认生成的的appkey curtime:当前UTC时间戳,从1970年1月1日0点0分0秒开始到现在的秒数(string类型)。 checksum:sha1(appsecret + restapikey+curtime),三个参数拼接的字符串,进行sha1计算,转化成16进制字符(string,小写), 其中restapikey和appsecret可在游密后台进行查看

停止单路rtmp服务端推流

当直播结束时,可以调用del_single_rtmp_param接口,关闭某频道的某用户单路RTMP推流。

  • header

    Content-Type: application/json
  • 请求URL

    https://api.youme.im/v2/im/del_single_rtmp_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • body
    {
    "RoomID":"123456",
    "UserID":"ym_jason"
    }

RoomID: 游戏频道ID,字符串,必选字段 UserID: 游戏用户ID,字符串,必选字段

  • 响应
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

开启rtmp服务端合流推流

  • 请求URL

    https://api.youme.im/v2/im/set_room_mix_rtmp_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • body

    {
    "RoomID":"123456",
    "PrimaryUserID":"ym_jason",
    "DstUrl":"rtmp://10.10.102.205:1935/hls/111",
    "VideoWidth":240,
    "VideoHeight":320
    }

    body为json格式,各个字段解释如下: RoomID: 游戏频道ID,字符串,必选字段 PrimaryUserID: 合流主用户ID,字符串,必选字段 DstUrl: 单路rtmp流目的url,字符串,必选字段 VideoWidth: 视频背景宽度,整数,可选字段, 默认240 VideoHeight: 视频背景高度,整数,可选字段, 默认320

  • 响应 响应指示设置是否成功
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

添加rtmp服务端合流单个用户参数

添加某游戏某频道某用户rtmp合流推流参数

  • 请求URL

    https://api.youme.im/v2/im/add_room_mix_user?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • body

    {
    "RoomID":"123456",
    "UserID":"ym_jason",
    "VideoWidth":240,
    "VideoHeight":320,
    "X":0,
    "Y":0,
    "Z": 0
    }

    body为json格式,各个字段解释如下: RoomID: 游戏频道ID,字符串,必选字段 UserID: 用户ID,字符串,必选字段 X: 视频显示X坐标,整数,必选字段 Y: 视频显示Y坐标,整数,必选字段 Z: 视频显示层次,整数,必选字段
    VideoWidth: 视频显示宽度,整数,必选字段 VideoHeight: 视频显示高度,整数,必选字段

  • 响应 响应指示设置是否成功
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

删除rtmp服务端合流单个用户参数

删除某游戏某频道某用户rtmp合流推流参数,若请求删除主用户合流参数,则整个频道合流参数被删除

  • 请求URL

    https://api.youme.im/v2/im/del_room_mix_user?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • body

    {
    "RoomID":"123456",
    "UserID":"ym_jason",
    }

    RoomID: 游戏频道ID,字符串,必选字段 UserID: 用户ID,字符串,必选字段

  • 响应 响应指示设置是否成功
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }

停止rtmp服务端合流推流

  • 请求URL

    https://api.youme.im/v2/im/del_room_mix_rtmp_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
  • body

    {
    "RoomID":"123456",
    }

    RoomID: 游戏频道ID,字符串,必选字段

  • 响应 响应指示设置是否成功
    {
    "ActionStatus" : "OK",
    "ErrorCode" : 0,
    "ErrorInfo" : ""
    }