游密Video SDK可以实现一对一、一对多、多对多的实时通话功能;在相同频道内的用户可自由发言和收看视频画面;适用于实时音视频通话、多人语音视频群聊等场景。
主要功能 | 功能描述 |
---|---|
登录房间 | 用户可以自由登录房间 |
自由语音视频互动 | 用户可以自由加入或退出语音视频互动 |
直接引入 ymrtc.umd.min.js
:
<script src="path/to/ymrtc.umd.min.js"></script>
let ymrtc = null;
ymrtc = YMRTC.createClient({
mode: 'rtc',
codec: 'h264,vp8',
debug: false, // 开启debug日志, 可选
dev: false // 使用测试环境, 可选
});
ymrtc.init(
APPKEY,
() => {
console.log('==============>init succ');
},
(err) => {
alert('init fail' + err);
}
);
其中APPKEY为用户产品区别于其它用户产品的标识,在游密官网控制台进行查看和获取。
// 加入频道
ymrtc.join(
token,
roomId,
userId,
'',
() => {
console.log('==============>join succ');
},
() => {
alert('登录失败。');
}
);
其中userId为用户名,roomId为房间号,token为APPKEY+APIKEY+userId的SHA1值(APPKEY和APIKEY可在游密官网控制台进行查看和获取),具体生成方法可参考Demo。
ymrtc.on('connection-state-change', (evt) => {
console.log('本端加入房间',evt);
if(evt.curState=='CONNECTED'){ //与服务器连接成功
localStream = ymrtc.createStream({ video: true, audio: true });//语音视频通话,video传值true
localStream.init(
() => {
console.log('================>Stream.init succ');
ymrtc.publish(localStream, (err) => {
console.log('====================>推流失败', err);
});
},
(err) => {
alert('获取流失败: ' + err);
}
);
}
}
);
// 事件监听:其他用户发布了媒体流
ymrtc.on('stream-added', function (evt) {
const { stream } = evt;
const memberId = stream.getId();
remoteStreams[memberId] = stream;
let memberDom = E('user-container-' + memberId);
if (!memberDom) {
memberDom = document.createElement('div');
memberDom.id = 'user-container-' + memberId;
memberDom.className = 'user-container';
memberDom.innerHTML = userTemplate.replace(/{{userId}}/g, memberId);
E('room').appendChild(memberDom);
// 双击视频全屏
E('user-video-' + memberId).ondblclick = function (e) {
if (e.target.requestFullscreen) e.target.requestFullscreen();
else if (e.target.webkitRequestFullScreen) e.target.webkitRequestFullScreen();
else if (e.target.mozRequestFullScreen) e.target.mozRequestFullScreen();
};
//静音
E('user-mute-on-' + memberId).onclick = () => {
const stream = remoteStreams[memberId];
if (stream) {
stream.muteAudio();
}
};
//解除静音
E('user-mute-off-' + memberId).onclick = () => {
const stream = remoteStreams[memberId];
if (stream) {
stream.unmuteAudio();
}
};
E('user-mute-on-' + memberId).checked = true;
//订阅其他用户的媒体流
ymrtc.subscribe(stream, (err) => {
console.error('========================>subscribe error', err);
});
}
});
//监听到订阅其他用户媒体流成功事件后stream-subscribed,调用stream.play进行播放
ymrtc.on('stream-subscribed', ({ stream }) => {
const streamId = stream.getId();
const elementId = `user-video-${streamId}`;
console.log("===>开始播放",stream,elementId);
stream.play(elementId);
});
ymrtc.leave(
() => {
console.log('========>leave succ');
},
(err) => {
console.log('========>leave fail');
}
);
游密支持服务器录制,将语音视频通话或共享画面进行实时录制保存,提供给更多的人在方便的时间观看或回溯。
设置开启服务端录制某频道某用户的视频流或者屏幕共享流,当客户端用户加入频道开启屏幕共享成功后,调用set_media_recod_param接口,设置某频道视频录或共享流录制。
https://api.youme.im/v2/im/set_media_recod_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
header
Content-Type: application/json
{
"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接口,设置某频道视频录或共享流录制。
https://api.youme.im/v2/im/del_media_recod_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
header
Content-Type: application/json
{
"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接口。
https://api.youme.im/v2/im/get_media_recod_infos?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
header
Content-Type: application/json
{
"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接口,获取到视频文件。
https://api.youme.im/v2/im/get_media_recod_info?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
header
Content-Type: application/json
{
"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": 字幕文件结束时间。
游密支持CDN旁路直播,实现将音视频流推送至第三方CDN平台,从而观众可以方便快捷地通过接入H5观看CDN直播。
开启音视频通讯特定频道特定人员的服务端RTMP旁路推流功能,建议主播在客户端加入直播频道成功后,调用set_single_rtmp_param
接口,设置某频道的某用户单路RTMP推流。
https://api.youme.im/v2/im/set_single_rtmp_param?appkey=123456789&identifier=admin&curtime=123456789&checksum=123456789abcdefg
header
Content-Type: application/json
{
"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可在游密后台进行查看。
当直播结束时,可以调用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
{
"RoomID":"123456",
"UserID":"ym_jason"
}
RoomID
: 游戏频道ID,字符串,必选字段。
UserID
: 游戏用户ID,字符串,必选字段。
{
"ActionStatus" : "OK",
"ErrorCode" : 0,
"ErrorInfo" : ""
}
请求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合流推流参数。
请求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合流推流参数,若请求删除主用户合流参数,则整个频道合流参数被删除。
请求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" : ""
}
请求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" : ""
}