Video 场景方案

实时音视频通话

场景概览

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

功能列表

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

快速开始

开发环境要求

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

Android Studio 开发环境集成

  1. 将SDK内到lib文件夹所有文件移至Android工程到libs文件夹下(可视实际项目情况自行放置,但需要确保能正确导入到工程内)。

  2. SDK文件包含如下:
SDK文件 jar包 / so库
libs youme_voice_engine.jar
libs android-support-v4.jar
arm64-v8a libyoume_voice_engine.so
armeabi libyoume_voice_engine.so
armeabi-v7a libyoume_voice_engine.so
x86 libyoume_voice_engine.so
x86_64 libyoume_voice_engine.so
  1. AndroidManifest.xml配置
    添加需要的录音和网络相关权限:

    uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <!-- video -->
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
  2. 反混淆配置 YOUMESDK不需要混淆,如果你的工程有混淆 请在proguard-rules.pro文件中添加如下代码:

    -keep class com.youme.**{*;}
    -keepattributes Signature
  3. 设置加载so库以及启动相关服务,在入口Activity类先导入package:
    import com.youme.voiceengine.mgr.YouMeManager;
    /// 需要在onCreate 方法里添加如下代码:必须加在onCreate前面,以免部分机型加载so库有问题
    YouMeManager.Init(this);
    super.onCreate(savedInstanceState);

示例代码

import com.youme.voiceengine.mgr.YouMeManager;

YouMeManager.Init(this);
api.SetCallback(YouMeCallBackInterface callBack);           //设置回调
api.init (strAPPKey, strAPPSecret, serverRegionId, strExtServerRegionName);  //初始化SDK
api.joinChannelSingleMode (strUserID, strRoomID, userRole, autoRecv); //加入语音频道
api.setVideoCallback();                                   //设置视频回调
api.StartCapturer();                                      //用户打开摄像头
VideoRenderer.getInstance().addRender(userId, SurfaceViewRenderer view)   //创建渲染
api.setMicrophoneMute (mute));                            //用户打开麦克风
api.setSpeakerMute (bOn);                                 //用户打开扬声器
api.leaveChannelAll ();                                     //退出语音频道
public void onEvent (int event, int error, String channel, Object param) {
    if (event == YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK) {
        Log.i(CommonDefines.LOG_TAG, "event:" + "param:" + param);
    }
}

实现视频通话(内部采集、内部渲染)

相关接口

API的调用主要使用“com.youme.voiceengine.api”来直接操作(部分接口在com.youme.voiceengine.NativeEngine),接口使用的基本流程为初始化->收到初始化成功回调通知->加入房间->收到加入房间成功回调通知->使用其它接口->离开房间->反初始化,要确保严格按照上述的顺序使用接口。

初始化流程
接口 含义
api.setLogLevel 设置日志级别
api.SetCallback(YouMeCallBackInterface callBack) 注册回调(event、memberchange等)
api.init 引擎初始化,区域参数使用 RTC_DEFAULT_SERVER,以支持全球SDN分配模式
加入房间流程
接口 含义
api.setVideoPreviewFps 设置本地预览帧率,建议设置为 30
api.setVideoLocalResolution 设置本地采集分辨率,建议设置为 480 * 640
api.setVideoFps 设置视频编码帧率(大流),建议设置为 10 - 15
api.setVideoNetResolution 设置编码分辨率(大流),建议设置,建议设置480 * 640
api.setVBR 设置视频编码是否采用VBR动态码率(大流),建议设置为 true
api.setVideoCodeBitrate 设置视频编码码率,若不调用则采用默认设置(大流),建议设置为 600 - 160
api.setVideoFpsForSecond 设置视频帧率(小流),建议设置为 7
api.setVideoNetResolutionForSecond 设置编码分辨率(小流),建议设置为 256 * 336 (16的整数被)
api.setVBRForSecond 设置视频编码是否采用VBR动态码率(小流),建议设置为true
api.setVideoCodeBitrateForSecond 设置视频编码码率,若不调用则采用默认设置(小流),200 - 100
setMicLevelCallback 设置是否开启讲话音量级别回调
setFarendVoiceLevelCallback 设置是否开启远端说话人音量级别回调
api.setAVStatisticInterval 设置音视频统计上报间隔,建议为5秒
api.setAutoSendStatus 设置状态同步(mic,speaker的状态会通知给接收端)
api.joinChannelSingleMode 加入房间,建议 role建议设置为1,autoRecv设置为false
api.SetVideoCallback 激活视频回调绑定
VideoRenderer.getInstance().setLocalUserId 设置自己的本地的userid
VideoRenderer.getInstance().addRender 创建本端预览
本地设备控制接口

收到JOIN_OK事件后可设置:

接口 含义
api.startCapturer 打开摄像头采集
api.stopCapturer 关闭摄像头采集
api.switchCamera 切换摄像头
api.setMicrophoneMute 设置麦克风状态
api.setSpeakerMute 设置扬声器状态
接收远端音视频接收和自定义信令
接口 含义
sendMessage 在房间内发送自定义信令消息,也可以通过服务器端restapi发送,可用于举手、控麦等操作
VideoRenderer.getInstance().addRender 创建远端用户渲染
VideoRenderer.getInstance().deleteRender() 删除远端用户渲染绑定
api.setUsersVideoInfo 设置观看用户的哪一路流(大小流),autoRecv设置为false时,需要调用该接口后才会接收对方的视频流
api.maskVideoByUserId 设置是否屏蔽他人视频,屏蔽对方的所有视频流,音频流保留
api.setListenOtherVoice 设置是否听其他人语音
onMemberChange 房间内其它用户加入/离开回调通知
离开房间
接口 含义
api.leaveChannelAll 退出所有房间
反初始化
接口 含义
api.unInit 反初始化引擎

关键调用顺序

  1. 调用初始化(api.init),等待初始化成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK

  2. 加入房间(api.joinChannelSingleMode),等待加入成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_JOIN_OK

  3. 激活视频回调绑定 api.SetVideoCallback()

  4. 打开摄像头(api.startCapture),设置麦克风扬声器等设备(api.setMicrophoneMute,api.setSpeakerMute)

  5. 接收到视频数据回调 YouMeConst.YouMeEvent.YOUME_EVENT_OTHERS_VIDEO_ON,绑定渲染(VideoRenderer.getInstance().addRender)

  6. 其它接口(开关摄像头、开关mic/speaker,屏蔽他人语音/视频)

  7. 退出房间

  8. 反初始化

设置回调监听

引擎底层对于耗时操作都采用异步回调的方式,函数调用会立即返回,操作结果java层会同步回调。因此,用户必须实现相关接口并在初始化前通过 api.SetCallback(this) 注册接收回调通知的对象。

使用类需要implements接口YouMeCallBackInterface,并实现该接口下的所有回调函数。回调都在子线程中执行,不能用于更新UI等耗时操作。

  • 首先要导入相关的包:
  import com.youme.voiceengine.MemberChange;
  import com.youme.voiceengine.YouMeCallBackInterface;
  • 然后implements接口YouMeCallBackInterface,具体实现回调方法:
  @Override
  public void onEvent(int eventType, int iErrorCode, String roomid, Object param){}
  @Override
  public void onRequestRestAPI(int requestID, int iErrorCode, String strQuery, String strResult){}
  @Override
  public void onMemberChange(String channelID, MemberChange[] arrChanges, boolean isUpdate){}
  @Override
  public  void onBroadcast(int bc, String room, String param1, String param2, String content){}
  @Override
  public  void onAVStatistic( int avType,  String userID, int value ){}
  @Override
  public void onVideoPreDecode(String userId, byte[] data, int dataSizeInByte) {}
  @Override
  public  void onTranslateTextComplete( int errorcode, int requestID, String text, int srcLangCode, int destLangCode ){
 }

实时音视频直播

场景概览

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

功能列表

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

快速开始

开发环境要求

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

Android Studio 开发环境集成

  1. 将SDK内到lib文件夹所有文件移至Android工程到libs文件夹下(可视实际项目情况自行放置,但需要确保能正确导入到工程内)。

  2. SDK文件包含如下:
SDK文件 jar包 / so库
libs youme_voice_engine.jar
libs android-support-v4.jar
arm64-v8a libyoume_voice_engine.so
armeabi libyoume_voice_engine.so
armeabi-v7a libyoume_voice_engine.so
x86 libyoume_voice_engine.so
x86_64 libyoume_voice_engine.so
  1. AndroidManifest.xml配置
    添加需要的录音和网络相关权限:

    uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <!-- video -->
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
  2. 反混淆配置 YOUMESDK不需要混淆,如果你的工程有混淆 请在proguard-rules.pro文件中添加如下代码:

    -keep class com.youme.**{*;}
    -keepattributes Signature
  3. 设置加载so库以及启动相关服务,在入口Activity类先导入package:
    import com.youme.voiceengine.mgr.YouMeManager;
    // 需要在onCreate 方法里添加如下代码:必须加在onCreate前面,以免部分机型加载so库有问题
    YouMeManager.Init(this);
    super.onCreate(savedInstanceState);

示例代码

import com.youme.voiceengine.mgr.YouMeManager;

YouMeManager.Init(this);
api.SetCallback(YouMeCallBackInterface callBack);           //设置回调
api.init (strAPPKey, strAPPSecret, serverRegionId, strExtServerRegionName);  //初始化SDK
ScreenRecorder.init(this);
api.joinChannelSingleMode (strUserID, strRoomID, userRole, autoRecv); //加入语音频道
api.setVideoCallback();                                   //设置视频回调
api.StartCapturer();                                      //用户打开摄像头
VideoRenderer.getInstance().addRender(userId, SurfaceViewRenderer view)   //创建渲染
ScreenRecorder.startScreenRecorder();
api.setMicrophoneMute (mute));                            //用户打开麦克风
api.setSpeakerMute (bOn);                                 //用户打开扬声器
ScreenRecorder.stopScreenRecorder()
api.leaveChannelAll ();                                     //退出语音频道
public void onEvent (int event, int error, String channel, Object param) {
    if (event == YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK) {
        Log.i(CommonDefines.LOG_TAG, "event:" + "param:" + param);
    }
}

实现音视频直播

相关接口

API的调用主要使用“com.youme.voiceengine.api”来直接操作(部分接口在com.youme.voiceengine.NativeEngine),接口使用的基本流程为初始化->收到初始化成功回调通知->加入房间->收到加入房间成功回调通知->使用其它接口->离开房间->反初始化,要确保严格按照上述的顺序使用接口。

初始化流程
接口 含义
api.setLogLevel 设置日志级别
api.SetCallback(YouMeCallBackInterface callBack) 注册回调(event、memberchange等)
api.init 引擎初始化,区域参数使用 RTC_DEFAULT_SERVER,以支持全球SDN分配模式
加入房间流程
接口 含义
api.setVideoPreviewFps 设置本地预览帧率,建议设置为 30
api.setVideoLocalResolution 设置本地采集分辨率,建议设置为 480 * 640
api.setVideoFps 设置视频编码帧率(大流),建议设置为 10 - 15
api.setVideoNetResolution 设置编码分辨率(大流),建议设置,建议设置480 * 640
api.setVBR 设置视频编码是否采用VBR动态码率(大流),建议设置为 true
api.setVideoCodeBitrate 设置视频编码码率,若不调用则采用默认设置(大流),建议设置为 600 - 160
api.setVideoFpsForSecond 设置视频帧率(小流),建议设置为 7
api.setVideoNetResolutionForSecond 设置编码分辨率(小流),建议设置为 256 * 336 (16的整数被)
api.setVBRForSecond 设置视频编码是否采用VBR动态码率(小流),建议设置为true
api.setVideoCodeBitrateForSecond 设置视频编码码率,若不调用则采用默认设置(小流),200 - 100
api.setVideoFpsForShare 设置共享流帧率,一般共享建议设置为 20帧
api.setVideoNetResolutionForShare 设置共享流编码分辨率,建议为 720p - 1080p
setMicLevelCallback 设置是否开启讲话音量级别回调
setFarendVoiceLevelCallback 设置是否开启远端说话人音量级别回调
api.setAVStatisticInterval 设置音视频统计上报间隔,建议为5秒
api.setAutoSendStatus 设置状态同步(mic,speaker的状态会通知给接收端)
api.joinChannelSingleMode 加入房间,建议 role建议设置为1,autoRecv设置为false
api.SetVideoCallback 激活视频回调绑定
VideoRenderer.getInstance().setLocalUserId 设置自己的本地的userid
VideoRenderer.getInstance().addRender 创建本端预览
本地设备控制接口

收到JOIN_OK事件后可设置:

接口 含义
api.startCapturer 打开摄像头采集
api.stopCapturer 关闭摄像头采集
api.switchCamera 切换摄像头
api.setMicrophoneMute 设置麦克风状态
api.setSpeakerMute 设置扬声器状态
打开屏幕共享流程

Android端需要调用Android端原生接口:

接口 含义
ScreenRecorder.init(this) 初始化屏幕共享功能,在加入房间之前开始初始化,需要传值activity上下文变量
ScreenRecorder.startScreenRecorder() 开始屏幕共享推流
ScreenRecorder.stopScreenRecorder() 结束屏幕共享推流
onActivityResult (原生接口)屏幕共享数据回调,需要在android原生里的java activity入口实现
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == ScreenRecorder.SCREEN_RECODER_REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                ScreenRecorder.onActivityResult(requestCode, resultCode, data);
                Log.d(TAG,"YOUME屏幕共享"+requestCode+"结果:"+resultCode);
            }else {
                isOpenShare = false;
            }  
        }
    }
接收远端音视频接收和自定义信令
接口 含义
sendMessage 在房间内发送自定义信令消息,也可以通过服务器端restapi发送,可用于举手、控麦等操作
VideoRenderer.getInstance().addRender 创建远端用户渲染
VideoRenderer.getInstance().deleteRender() 删除远端用户渲染绑定
api.setUsersVideoInfo 设置观看用户的哪一路流(大小流),autoRecv设置为false时,需要调用该接口后才会接收对方的视频流
api.maskVideoByUserId 设置是否屏蔽他人视频,屏蔽对方的所有视频流,包括共享流,音频流保留
api.setListenOtherVoice 设置是否听其他人语音
onMemberChange 房间内其它用户加入/离开回调通知
离开房间
接口 含义
api.leaveChannelAll 退出所有房间
反初始化
接口 含义
api.unInit 反初始化引擎

关键调用顺序

  1. 调用初始化(api.init),等待初始化成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK,以及初始化屏幕共享功能ScreenRecorder.init(this)

  2. 以主播身份加入房间(api.joinChannelSingleMode),等待加入成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_JOIN_OK(参数三传主播身份YOUME_USER_HOST), 观众传的身份可以是听众 也可以是自由人(注:以自由人进入频道 需要关闭麦克风)

  3. 激活视频回调绑定 api.SetVideoCallback()

  4. 打开摄像头(api.startCapture),设置麦克风扬声器等设备(api.setMicrophoneMute,api.setSpeakerMute)

  5. 打开共享ScreenRecorder.startScreenRecorder(),此时会去申请共享权限,需要允许后共享屏幕才能生效;

  6. 接收到视频数据回调 YouMeConst.YouMeEvent.YOUME_EVENT_OTHERS_VIDEO_ON,绑定渲染(VideoRenderer.getInstance().addRender)

  7. 其它接口(开关摄像头、开关mic/speaker,屏蔽他人语音/视频)

  8. 结束共享ScreenRecorder.stopScreenRecorder(),此时关闭共享屏幕;

  9. 退出房间

  10. 反初始化

设置回调监听

引擎底层对于耗时操作都采用异步回调的方式,函数调用会立即返回,操作结果java层会同步回调。因此,用户必须实现相关接口并在初始化前通过 api.SetCallback(this) 注册接收回调通知的对象。

使用类需要implements接口YouMeCallBackInterface,并实现该接口下的所有回调函数。回调都在子线程中执行,不能用于更新UI等耗时操作。

  • 首先要导入相关的包:
  import com.youme.voiceengine.MemberChange;
  import com.youme.voiceengine.YouMeCallBackInterface;
  • 然后implements接口YouMeCallBackInterface,具体实现回调方法:
  @Override
  public void onEvent(int eventType, int iErrorCode, String roomid, Object param){}
  @Override
  public void onRequestRestAPI(int requestID, int iErrorCode, String strQuery, String strResult){}
  @Override
  public void onMemberChange(String channelID, MemberChange[] arrChanges, boolean isUpdate){}
  @Override
  public  void onBroadcast(int bc, String room, String param1, String param2, String content){}
  @Override
  public  void onAVStatistic( int avType,  String userID, int value ){}
  @Override
  public void onVideoPreDecode(String userId, byte[] data, int dataSizeInByte) {}
  @Override
  public  void onTranslateTextComplete( int errorcode, int requestID, String text, int srcLangCode, int destLangCode ){
 }

视频会议

场景概览

游密提供视频会议解决方案,可以让不同地点的与会人通过网络和多媒体设备进行实时交互,如同在一个会议室面对面沟通一样。通过召开远程视频会议,可大大提高工作效率,节省与会人员的差旅时间和费用,缩短决策时间,为企业降本增效,提升企业竞争力。

相关接口

接口 含义
api.SetCallback 设置回调
api.init 引擎初始化
api.setVideoLocalResolution 设置本地采集分辨率,建议设置为 720 * 960
api.setVideoPreviewFps 设置本地预览帧率,建议设置为 15 - 30
api.setVideoNetResolution 设置网络传输分辨率(大流),建议设置为 720 * 960
api.setVideoFps 设置视频传输帧率,建议设置为 15 - 30
api.setVideoNetResolutionForShare 设置共享流编码分辨率,建议为 720p * 1280p
api.setVideoFpsForShare 设置共享流帧率,一般共享建议设置为 15帧
api.setVideoNetResolutionForSecond 设置视频编码分辨率(小流),建议设置为 480 * 640 (16的整数被)
api.setVideoFpsForSecond 设置视频传输帧率(小流),建议设置为 15
api.joinChannelSingleMode 加入会议房间,建议role设置为1,autoRecv设置为false
api.setVideoCallback 设置视频渲染回调
api.startCapture 开始摄像头采集
api.createRender 创建渲染
api.setMicrophoneMute 设置麦克风状态
api.setSpeakerMute 设置扬声器状态
VideoRenderer.getInstance().setLocalUserId 设置自己的本地的userid
VideoRenderer.getInstance().addRender 创建本端/远端渲染
VideoRenderer.getInstance().deleteRender 删除本端/远端预览

关键调用顺序

  1. 设置接收回调 api.SetCallback 需要在初始化之前调用,用于接收onEvent回调事件

  2. 初始化SDK api.init 等待OnEvent监听里返回的初始化成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK,初始化成功之后才可以调用其他加入频道相关接口

  3. 设置以上相关接口中的分辨率、帧率等参数接口,需要在加入会议房间之前调用

  4. 加入会议频道 joinChannelSingleMode 等待加入成功的通知事件 YouMeConst.YouMeEvent.YOUME_EVENT_JOIN_OK

  5. 设置视频回调绑定 setVideoCallback

  6. 打开摄像头(api.startCapture),设置麦克风扬声器等设备(api.setMicrophoneMute,api.setSpeakerMute),需要在加入会议房间成功后调用

  7. 接收到远端视频数据回调 YouMeConst.YouMeEvent.YOUME_EVENT_OTHERS_VIDEO_ON,绑定渲染(VideoRenderer.getInstance().addRender)

  8. 可以根据业务需求控制其他用户的麦克风、扬声器 setOtherMicMute / setOtherSpeakerMute

  9. 离开会议频道 leaveChannelAll

服务器录制(服务器接口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" : ""
    }