Video 场景方案

实时音视频通话

场景概览

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

功能列表

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

快速开始

开发环境要求

  • 两台机器,用于模拟两个用户进行语音通话
  • 到官网注册账号、并添加应用产品以获得相关到AppKey、AppSecret参数

SDK目录概述

YMRTC SDK提供了以下文件:

  • Plugins库文件,分为Android平台和iOS平台。

    AndroidManifest.xml:可用来配置安卓下SDK所需要的权限、服务等。 Plugins/Android: Android平台使用的动态库,包括ARMv5、ARMv7和 X86 三种 CPU 架 构下的libyoume_voice_engine.so文件,还包括youme_voice_engine.jar。 Plugins/iOS:iOS平台使用的静态库,包含libyoume_voice_engine.a文件。

  • YouMeVoiceEngine文件夹,内含封装SDK的C#接口文件。

    YouMeVoiceAPI.cs:封装了Video SDK 的全部功能接口。 YouMeConstDefine.cs:包含Video SDK 错误码等枚举类型定义。

Unity3D开发环境集成

  • 双击 unitypackage包;
  • 在弹出的Import Unity Package对话框中,所有的复选框打勾(如下图所示),但要格外注意AndroidManifest.xml可能与工程已有或将有的同名文件直接覆盖,应先比对合并;

1.png

  • 为应用选择要支持的CPU架构: 在Unity3D的Project View中选中Assets/Plugins/Android/libs下特定的CPU架构,比如armeabi-v7a,勾选右侧的Inspector View中的Select platforms for plugin下的Android右侧的复选框,此处注意armeabi和armeabi-v7a两种ARM架构的库文件,只能勾选其中一种架构,否则会出现库文件冲突的错误

2.png

  1. 导出Android工程
  • File->Build Settings…Platform列表中选择Android,酌情点击Switch Platform按钮,然后勾选右侧Google Android Project
  • 点击Build Settings->Export,选择输出的Android工程路径,导出Android工程; 3.gif
  1. 导出iOS工程
  • File->Build Settings…的Platform列表中选择iOS,酌情点击Switch Platform按钮;
  • 点击Build Settings->Build,选择输出iOS工程的路径,输入工程名字,导出iOS工程;
  • 在Xcode中打开上一步输出的iOS工程,在工程配置中Build Phases->Link Binary With Libraries下拉菜单中添加添加这几个框架文件:
    libsqlite3.0.tbd
    libz.1.2.5.tbd
    libresolv.9.tbd
    CoreTelephony.framework
    VideoToolbox.framework
    AudioToolbox.framework
    AVKit.framework
    CoreVideo.framework
    CoreFoundation.framework
    AVFoundation.framework
    SystemConfiguration.framework
    CFNetwork.framework
    GLKit.framework

  • 为iOS10以上版本添加录音权限配置 iOS10系统使用录音权限,需要在target的info.plist中新加NSMicrophoneUsageDescription键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。配置方式如下: iOS10录音权限配置

相关接口

init 引擎初始化。
setVideoLocalResolution 设置本地采集分辨率。
setVideoNetResolution 设置网络传输分辨率。
joinChannelSingleMode 加入房间。
createRender 创建渲染。
startCapture 开始摄像头采集。
setMicrophoneMute 设置麦克风状态。
setSpeakerMute 设置扬声器状态。

关键调用顺序

1.初始化(init)设置本地采集及网络传输分辨率(也可采用默认设置)。

2.加入房间(joinChannelSingleMode),打开摄像头(startCapture),麦克风扬声器等设备(setMicrophoneMute,setSpeakerMute)。

3.接收到视频数据回调后,创建渲染(createRender)。

实时音视频直播

场景概览

游密Video SDK可以实现直播功能,通过屏幕共享分享游戏画面,实时直播游戏全过程,介绍玩法、策略,展示真实操作,同时支持主播和玩家通过弹幕、聊天、活动等形式互动。

功能列表

主要功能 功能描述
登录房间 支持以不同身份如主播/观众登录房间,决定是否只能观看
语音视频 观众可以听到主播的语音,观看主播视频画面
变声 主播可以自由变音
播放战歌 主播端支持播放战歌,提升直播效果
屏幕共享 主播可以共享自己的画面

快速开始

开发环境要求

  • 两台机器,用于模拟两个用户进行语音通话
  • 到官网注册账号、并添加应用产品以获得相关到AppKey、AppSecret参数

SDK目录概述

YMRTC SDK提供了以下文件:

  • Plugins库文件,分为Android平台和iOS平台。

    AndroidManifest.xml:可用来配置安卓下SDK所需要的权限、服务等。 Plugins/Android: Android平台使用的动态库,包括ARMv5、ARMv7和 X86 三种 CPU 架 构下的libyoume_voice_engine.so文件,还包括youme_voice_engine.jar。 Plugins/iOS:iOS平台使用的静态库,包含libyoume_voice_engine.a文件。

  • YouMeVoiceEngine文件夹,内含封装SDK的C#接口文件。

    YouMeVoiceAPI.cs:封装了Video SDK 的全部功能接口。 YouMeConstDefine.cs:包含Video SDK 错误码等枚举类型定义。

Unity3D开发环境集成

  • 双击 unitypackage包;
  • 在弹出的Import Unity Package对话框中,所有的复选框打勾(如下图所示),但要格外注意AndroidManifest.xml可能与工程已有或将有的同名文件直接覆盖,应先比对合并;

1.png

  • 为应用选择要支持的CPU架构: 在Unity3D的Project View中选中Assets/Plugins/Android/libs下特定的CPU架构,比如armeabi-v7a,勾选右侧的Inspector View中的Select platforms for plugin下的Android右侧的复选框,此处注意armeabi和armeabi-v7a两种ARM架构的库文件,只能勾选其中一种架构,否则会出现库文件冲突的错误

2.png

  1. 导出Android工程
  • File->Build Settings…Platform列表中选择Android,酌情点击Switch Platform按钮,然后勾选右侧Google Android Project
  • 点击Build Settings->Export,选择输出的Android工程路径,导出Android工程; 3.gif
  1. 导出iOS工程
  • File->Build Settings…的Platform列表中选择iOS,酌情点击Switch Platform按钮;
  • 点击Build Settings->Build,选择输出iOS工程的路径,输入工程名字,导出iOS工程;
  • 在Xcode中打开上一步输出的iOS工程,在工程配置中Build Phases->Link Binary With Libraries下拉菜单中添加添加这几个框架文件:
    libsqlite3.0.tbd
    libz.1.2.5.tbd
    libresolv.9.tbd
    CoreTelephony.framework
    VideoToolbox.framework
    AudioToolbox.framework
    AVKit.framework
    CoreVideo.framework
    CoreFoundation.framework
    AVFoundation.framework
    SystemConfiguration.framework
    CFNetwork.framework
    GLKit.framework

  • 为iOS10以上版本添加录音权限配置 iOS10系统使用录音权限,需要在target的info.plist中新加NSMicrophoneUsageDescription键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。配置方式如下: iOS10录音权限配置

相关接口

init 引擎初始化。
setVideoLocalResolution 设置本地采集分辨率。
setVideoNetResolution 设置网络传输分辨率。
joinChannelSingleMode 加入房间。
createRender 创建渲染。
startCapture 开始摄像头采集。
setMicrophoneMute 设置麦克风状态。
setSpeakerMute 设置扬声器状态。
setHeadsetMonitorOn 设置监听。
setBackgroundMusicVolume 设置战歌播放音量。
playBackgroundMusic 播放战歌。
setResolution 设置共享分辨率。
setFps 设置共享帧率。
startScreenRecorder 开始共享。
stopScreenRecorder 停止共享。

关键调用顺序

  1. 以主播身份进入频道 初始化(init)->joinChannelSingleMode(参数三传主播身份YOUME_USER_HOST), 观众传的身份可以是听众 也可以是自由人(住进自由人进入频道 需要关闭麦克风)。

  2. 主播打开摄像头,麦克风等设备。

  3. 设置监听 setHeadsetMonitorOn(true,true)参数1表示是否监听麦克风 true表示监听,false表示不监听 ,参数2表示是否监听战歌,true表示监听,false表示不监听。

  4. setBackgroundMusicVolume(70)调节背景音量大小。

  5. playBackgroundMusic(string pFilePath, bool bRepeat) 播放本地的mp3音乐。 参数一 本地音乐路径, 参数二 是否重复播放 true重复,false不重复。

  6. 设置共享分辨率和帧率,开始共享屏幕startScreenRecorder

  7. 远端有视频流过来,会通知 YOUME_EVENT_OTHERS_VIDEO_ON 事件,此时调用createRender创建相关渲染。

  8. 结束共享stopScreenRecorder,此时关闭共享屏幕。

  9. 退出房间。

  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" : ""
    }