baijiayun.client.api.room 源代码

# encoding: utf-8
from __future__ import absolute_import, unicode_literals

import datetime

from optionaldict import optionaldict

from .base import BaseAPI


[文档]class Room(BaseAPI): """ 房间 """
[文档] def create( self, title, start_time, end_time, type, industry_type=0, max_users=0, pre_enter_time=None, is_long_term=0, is_group_live=0, template_name=None, speak_camera_turnon=None, teacher_need_detect_device=None, student_need_detect_device=None, is_video_main=None, m_is_video_main=None, is_mock_live=0, is_push_live=0, is_webrtc_live=None, mock_room_id=0, mock_session_id=0, mock_video_id=0, switch_room_role=0, enable_share=0, enable_group_users_public=0, group_admin_permission=0, enable_group_chat_public=0, new_group_live=0, mock_live_record=None, enable_weixin_auth=1, has_student_raise=0, end_delay_time=None, class_end_operation=None, disable_switch_class=None, max_backup_users=0, auto_on_stage=0, has_foreign_user=None, background_attachment=None, whiteboard_attachment=None, template_type=None, enable_cloud_record=None, ): """ 创建房间 :param title: 直播课标题,不超过50个字符或汉字,超过部分将进行截取 :param start_time: 开课时间, unix时间戳(秒) :param end_time: 下课时间, unix时间戳(秒) :param type: 1:一对一课(老的班型,老账号支持) 2:普通大班课 3:小班课普通版(老的班型,老账号支持)4:小班课 5:双师 6:基础班一对一 :param industry_type: 0:表示教育 1:表示企业 :param max_users: 人数限制 大班课/双师班:不传或传0表示不限制。小班课:必传(取值范围1-12)作为台上人数;基础班一对一时,必须传1值 :param pre_enter_time: 学生可提前进入的时间,单位为秒 :param is_long_term: 是否是长期房间,0:普通房间(注:普通房间时长小于24小时) 1:长期房间 默认为普通房间(注:需要给账号开通长期房间权限才可以创建长期房间) :param is_group_live: 是否是分组直播,0:常规直播 1:分组直播(注:需要给账号开通分组直播权限才可以创建分组直播,必须同时指定参数type为2)2:分组直播-大小班(注:需要权限,参数type须为2) :param template_name: 可选值 教育直播:doubleCamera(双摄像头)、classic(经典模板)、triple(三分屏)、single(单视频模板)、liveWall(视频墙) 企业直播:singleVideo(单视频),docAudio(文档加音频),docVideo(文档加视频) :param speak_camera_turnon: 学生发言时是否自动开启摄像头 1:开启 2:不开启 默认会开启 :param teacher_need_detect_device: 老师是否启用设备检测 1:启用 2:不启用 默认不启用 :param student_need_detect_device: 学生是否启用设备检测 1:启用 2:不启用 默认不启用 :param is_video_main: 指定PC端是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以ppt为主,该选项只针对三分屏有效) :param m_is_video_main: 指定手机H5页面是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以视频为主) :param is_mock_live: 是否是伪直播,0:否 1:是(注:需要给账号开通伪直播权限,选择伪直播时,必须要选择mock_video_id或mock_room_id和mock_session_id) :param is_push_live: 是否是推流直播,0:常规直播 1:推流直播 默认是常规直播(注:需要给账号开通推流直播的权限) :param is_webrtc_live: 是否是webrtc课程,1:是(需要联系百家云配置webrtc类型才可使用) :param mock_room_id: 伪直播关联的回放教室号 :param mock_session_id: 伪直播关联的回放教室session_id(针对长期房间) :param mock_video_id: 伪直播关联的点播视频ID :param switch_room_role: 分组直播,大小班切换控制角色 1:大班老师控制,2 小班老师控制 :param enable_share: 是否允许APP分享 1:允许 2:不允许 0或不传则使用默认值,默认是允许 :param enable_group_users_public: 分组课堂/线上双师 成员名单数据权限 0:成员只看组内权限 1:成员可看全部权限 0或不传则使用默认值,默认是成员只看组内权限 :param group_admin_permission: 分组/线上双师 助教查看答题数据权限 0:助教查看组内答题数据 1:助教查看全部数据 0或不传则使用默认值,默认是助教查看组内答题数据 :param enable_group_chat_public: 分组直播/线上双师 成员聊天数据权限 0:成员只看组内权限 1:成员可看全部权限 0或不传则使用默认值,默认是成员只看组内权限 :param new_group_live: 是否分组,0:常规直播 1:分组课堂(注:需要给账号开通相关权限才可以创建分组直播,必须同时指定参数type为2)2:线上双师(注:需要权限,参数type须为2) :param mock_live_record: 伪直播自动录制 1:是,0:否 :param enable_weixin_auth: 是否启用微信授权 1:启用,2:不启用 :param has_student_raise: 有无学生上麦,仅在webrtc班型上使用此参数 0:无,1:有 :param end_delay_time: 课程预设的结束时间后可以拖堂的时间,到时间会强制下课,单位(秒),0不强制,大于0生效,最大不可超过3600秒(一小时),设置后课程不能修改结束时间 :param class_end_operation: 大班下课后操作,0:回到小班,1:全员下课 默认0 :param disable_switch_class: 课中是否允许切班,1:不允许,0:允许 默认0,如果不允许,配置该字段需要将switch_room_role设置为1,否则不生效 :param max_backup_users: 小班课1vNvM班型,台下学生数量限制,最大支持300 :param auto_on_stage: 小班课1vNvM班型,台下学生是否自动上台; 0:不是,1:是 :param has_foreign_user: 是否有海外用户,如果有海外用户请传此参数; 1:否,2:是 :param background_attachment: 小班课教室背景图(文件不参与签名的计算),图片文件 :param whiteboard_attachment: 小班课教室白板(文件不参与签名的计算),图片文件 :param template_type: 小班课模板类型 可传1,2,3;1为第一套模板;2为第二套模板;3为一对一模板,需申请开通 :param end_delay_time: 课程预设的结束时间后可以拖堂的时间,到时间会强制下课,单位(秒),0不强制,大于0生效,最大不可超过7200秒(两小时) :param enable_cloud_record: 专业小班课教室是否展示云端录制,1展示 2隐藏 ,默认取系统配置 """ if isinstance(start_time, datetime.datetime): start_time = int(start_time.timestamp()) if isinstance(end_time, datetime.datetime): end_time = int(end_time.timestamp()) return self._post( '/openapi/room/create', optionaldict({ 'partner_id': self.partner_id, 'title': title, 'start_time': start_time, 'end_time': end_time, 'type': type, 'industry_type': industry_type, 'max_users': max_users, 'pre_enter_time': pre_enter_time, 'is_long_term': is_long_term, 'is_group_live': is_group_live, 'template_name': template_name, 'speak_camera_turnon': speak_camera_turnon, 'teacher_need_detect_device': teacher_need_detect_device, 'student_need_detect_device': student_need_detect_device, 'is_video_main': is_video_main, 'm_is_video_main': m_is_video_main, 'is_mock_live': is_mock_live, 'is_push_live': is_push_live, 'is_webrtc_live': is_webrtc_live, 'mock_room_id': mock_room_id, 'mock_session_id': mock_session_id, 'mock_video_id': mock_video_id, 'switch_room_role': switch_room_role, 'enable_share': enable_share, 'enable_group_users_public': enable_group_users_public, 'group_admin_permission': group_admin_permission, 'enable_group_chat_public': enable_group_chat_public, 'new_group_live': new_group_live, 'mock_live_record': mock_live_record, 'enable_weixin_auth': enable_weixin_auth, 'has_student_raise': has_student_raise, 'end_delay_time': end_delay_time, 'class_end_operation': class_end_operation, 'disable_switch_class': disable_switch_class, 'max_backup_users': max_backup_users, 'auto_on_stage': auto_on_stage, 'has_foreign_user': has_foreign_user, 'template_type': template_type, 'enable_cloud_record': enable_cloud_record, }), files=optionaldict({ 'background_attachment': background_attachment, 'whiteboard_attachment': whiteboard_attachment, }), )
[文档] def update( self, room_id, title=None, start_time=None, end_time=None, max_users=None, pre_enter_time=None, template_name=None, forbidden_end_types=None, is_video_main=None, m_is_video_main=None, mock_room_id=None, mock_session_id=None, mock_video_id=None, switch_room_role=None, enable_cloud_record=None, class_end_operation=None, disable_switch_class=None, max_backup_users=None, background_attachment=None, whiteboard_attachment=None, template_type=None ): """ 更新房间信息 :param room_id: 房间ID,14位 :param title: 房间标题 :param start_time: 开课时间, unix时间戳(秒) :param end_time: 结束时间, unix时间戳(秒) :param max_users: 人数限制 大班课/双师班:不传或传0表示不限制。小班课:必传(取值范围1-12)作为台上人数;基础班一对一时,必须传1值 :param pre_enter_time: 学生可提前进入的时间,单位为秒 :param template_name: 可选值 教育直播:doubleCamera(双摄像头)、classic(经典模板)、triple(三分屏)、single(单视频模板)、liveWall(视频墙) 企业直播:singleVideo(单视频),docAudio(文档加音频),docVideo(文档加视频) :param forbidden_end_types: 指定屏蔽的端,可选值(web:pc浏览器, h5:手机浏览器)多种以英文逗号分隔 :param is_video_main: 指定PC端是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以ppt为主,该选项只针对三分屏有效) :param m_is_video_main: 指定手机H5页面是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以视频为主) :param mock_room_id: 伪直播关联的回放教室号 :param mock_session_id: 伪直播关联的回放教室session_id(针对长期房间) :param mock_video_id: 伪直播关联的点播视频ID :param switch_room_role: 分组直播大小班切换,角色控制 1:大班 2:小班 :param enable_cloud_record: 小班课教室是否展示云端录制,1展示 2隐藏 ,默认取系统配置 :param class_end_operation: 大班下课后操作,0:回到小班,1:全员下课 默认0 :param disable_switch_class: 课中是否允许切班,1:不允许,0:允许 默认0,如果不允许,配置该字段需要将switch_room_role设置为1,否则不生效 :param max_backup_users: 小班课1vNvM班型,台下学生数量限制 :param background_attachment: 小班课教室背景图(文件不参与签名的计算),图片文件 :param whiteboard_attachment: 小班课教室白板(文件不参与签名的计算),图片文件 :param template_type: 专业小班课模板类型 可传1,2,3;1为第一套模板;2为第二套模板;3为一对一模板,需申请开通 """ if isinstance(start_time, datetime.datetime): start_time = int(start_time.timestamp()) if isinstance(end_time, datetime.datetime): end_time = int(end_time.timestamp()) return self._post( '/openapi/room/update', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'title': title, 'start_time': start_time, 'end_time': end_time, 'max_users': max_users, 'pre_enter_time': pre_enter_time, 'template_name': template_name, 'forbidden_end_types': forbidden_end_types, 'is_video_main': is_video_main, 'm_is_video_main': m_is_video_main, 'mock_room_id': mock_room_id, 'mock_session_id': mock_session_id, 'mock_video_id': mock_video_id, 'switch_room_role': switch_room_role, 'enable_cloud_record': enable_cloud_record, 'class_end_operation': class_end_operation, 'disable_switch_class': disable_switch_class, 'max_backup_users': max_backup_users, 'template_type': template_type, }), files=optionaldict({ 'background_attachment': background_attachment, 'whiteboard_attachment': whiteboard_attachment, }), )
[文档] def delete( self, ): """ 删除教室 删除一个教室 """ return self._post( '/openapi/room/delete', optionaldict({ 'partner_id': self.partner_id, }), )
[文档] def info( self, room_id, ): """ 获取教室信息 :param room_id: 教室id """ return self._post( '/openapi/room/info', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, }), )
[文档] def getcode( self, room_id, user_number, user_avatar=None, ): """ 生成用户参加码 为了方便学生进入教室,我们可以根据学生的user_number生成学生参加码。学生可以凭参加码直接进入教室。 :param room_id: 教室ID :param user_number: 合作方账号体系下的用户ID号,必须是int类型数字 :param user_avatar: 用户头像,需要完整的url地址 """ return self._post( '/openapi/room/getcode', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'user_number': user_number, 'user_avatar': user_avatar, }), result_processor=lambda x: x['student_code'] )
[文档] def get_code_info( self, code, ): """ 获取用户参加码信息 :param code: 学生参加码 """ return self._post( '/openapi/room/getCodeInfo', optionaldict({ 'partner_id': self.partner_id, 'code': code, }), )
[文档] def listcode( self, room_id, type=0, page=1, limit=100, ): """ 获取已生成的参加码列表 获取已经生成的学生参加码列表 :param room_id: 教室ID :param type: 0表示普通参加码 1表示试听参加码 :param page: 页数,参加码数量过多时,可以分多页来获取,每页取limit条。默认值为1 :param limit: 每页获取的条数,默认值100,最大值不能超过1000 """ return self._post( '/openapi/room/listcode', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'type': type, 'page': page, 'limit': limit, }), )
[文档] def list( self, page=1, limit=100, product_type=0, ): """ 获取教室列表 获取已经创建的教室列表 :param page: 页数,参加码数量过多时,可以分多页来获取,每页取limit条。默认值为1 :param limit: 每页获取的条数,默认值100,最大值不能超过1000 :param product_type: 1:教育直播 2:小班课 4:企业直播(单一产品线账号不需要传此参数) """ return self._post( '/openapi/room/list', optionaldict({ 'partner_id': self.partner_id, 'page': page, 'limit': limit, 'product_type': product_type, }), result_processor=lambda x: x['list'] )
[文档] def get_audition_code( self, room_id, user_numbers, user_avatar=None, audition_length=None, ): """ 生成用户试听参加码 :param room_id: 房间ID :param user_numbers: 合作方账号体系下的用户ID号,必须是数字且要大于0,多个的话用逗号分隔 :param user_avatar: 用户头像,需要完整的url地址 :param audition_length: 必须大于0,且不能超过3600,单位是秒数,值指的是具体试听时长 """ return self._post( '/openapi/room/getAuditionCode', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'user_numbers': user_numbers, 'user_avatar': user_avatar, 'audition_length': audition_length, }), )
[文档] def create_group_live_codes( self, room_id, number, ): """ 创建分组直播参加码 该接口用于创建分组直播参加码 :param room_id: :param number: 创建分组的数量 """ return self._post( '/openapi/room/createGroupLiveCodes', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'number': number, }), )
[文档] def get_group_live_codes( self, room_id, ): """ 获取分组直播参加码 该接口用于获取分组直播参加码 :param room_id: """ return self._post( '/openapi/room/getGroupLiveCodes', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, }), )
[文档] def get_push_live_url( self, room_id, ): """ 获取推流直播的推流地址 该接口用于获取推流直播的推流地址 :param room_id: """ return self._post( '/openapi/room/getPushLiveUrl', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, }), )
[文档] def get_group_sub_room_id( self, room_id, ): """ 获取支持大小班的分组直播小班教室room_id 该接口用于获取支持大小班的分组直播小班教室room_id :param room_id: """ return self._post( '/openapi/room/getGroupSubRoomId', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, }), )
[文档] def get_pull_stream_url( self, room_id, ): """ 获取推流直播的拉流地址 该接口仅用于获取推流直播的拉流地址 :param room_id: """ return self._post( '/openapi/room/getPullStreamUrl', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, }), )
[文档] def set_spot_video( self, room_id, video_ids, ): """ 直播设置插播回放 该接口用于设置大班课里插播回放的视频,一个直播间最多只能设置3个插播回放。 注:新选择的插播视频需5小时处理时间,请生效后使用,7天后会过期,将不可使用 :param room_id: :param video_ids: 插播回放对应的视频id,多个以英文逗号分隔 """ return self._post( '/openapi/room/setSpotVideo', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'video_ids': video_ids, }), )
[文档] def get_spot_video( self, room_id, video_ids, ): """ 获取教室设置的插播回放 该接口用于设置大班课里插播回放的视频,一个直播间最多只能设置3个插播回放。 注:新选择的插播视频需5小时处理时间,请生效后使用,7天后会过期,将不可使用 :param room_id: :param video_ids: 插播回放对应的视频id,多个以英文逗号分隔 """ return self._post( '/openapi/room/getSpotVideo', optionaldict({ 'partner_id': self.partner_id, 'room_id': room_id, 'video_ids': video_ids, }), )