iPad发起直播+live学一学连麦演示(视频)

视频说明

现在,我们体验一下使用iPad发起直播,微信小程序参与连麦的功能。
首先,我们在iPad上打开讲课啦app,使用频道号和密码登录,登录成功后,打开直播所需的文档,点击上课,就可以开始直播啦;点击连线,开启视频连线,这时候,其他员工可以使用live学一学小程序连麦。
打开微信小程序live学一学,输入直播的频道号,即可进入课堂,点击右边这里,申请连麦,这时候,iPad发起端允许就可以成功连线了。
支持17人音视频连麦互动。
好啦,今天的体验就到这里,如果您在使用过程中有任何疑问,欢迎联系保利威服务团队。

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

使用IPad直播——讲课啦App

讲课啦是一款适用于移动端场景讲课的App,包含文档、画笔、连麦、聊天等功能,讲师仅需简单几步,就能轻松授课。观看视频教程

1. 环境准备

 (1) 网络准备

   建议在稳定的网络环境下直播,避免同一网络环境下,有其它占用上行网络较多的设备或应用。

 (2) 硬件准备

   讲课啦app仅支持IPad使用,建议使用IPad及以上型号,IPad mini由于屏幕较小,操作会略有不便。

 (3) 频道准备

   发起直播需要使用频道号,一个频道号相当于一个直播间。频道号在「直播后台」创建,或者由管理员提供。

   创建频道流程可参考:后台使用手册「管理后台- 频道的创建、分类、删除、修改 - 创建直播间」

   讲课啦app仅支持「三分屏」场景的频道,仅支持讲师登录。

3

 (4) 下载app

   使用iPad在App Store中搜索「讲课啦」,或者扫码下载。

1

2. 启动App

   进入App后,填入频道号和密码,进入主界面。

2

   主界面可以分为「快速操作区」、「文档预览区」、「互动聊天区」三个部分。

   「快速操作区」:可以添加、切换PPT,切换白板,开启音视频连线等。

   「文档预览区」:可以预览PPT、白板画面,在底部可以快速导航到需要显示的PPT画面,顶部可以操作画笔。连线以后,观众的画面会出现在顶部,点击相应的观众可以设置其摄像头、麦克风权限,以及挂断连线。

   「互动聊天区」:可以与观众文字图片互动,开关聊天室,在线列表管理,回复私聊提问等。

3

3. 添加PPT

   在「快速操作区」中点击「文档管理」,可以点选已上传的PPT文档。「讲课啦」暂不支持上传本地文档,在使用PPT文档前,请先在页面后台或电脑客户端上传。

4

   页面后台上传:在「直播管理后台- 顶部导航栏 - 文档管理」中,选择对应的频道后,点击「本地上传」,等待加载完成即可。

5

   客户端上传:参考「云课堂(3.8.x)或(3.9.x) - 使用PPT」部分。

   PPT支持动画效果,以及手势滑动翻页,向左滑动为下一页,向右滑动为上一页。

4. 系统设置

   点击「快速操作区」下方的「齿轮」按钮,可以进入系统设置,包括:清晰度、画面比例、前置后置摄像头选择、画面变焦、麦克风音量等。

   若需要关闭摄像头或麦克风,可在「聊天互动区」上方,点击麦克风按钮关闭麦克风声音,点击摄像头画面,在显示的状态条中点击摄像头按钮关闭摄像头画面。

6

5. 上课

   在添加好PPT或白板,调整好系统参数后,确认右上方网络状态较好,即可点击「上课」按钮,开始讲课。

7

6. 使用画笔

   在「文档预览区」上方,点击画笔按钮,即可使用画笔。使用画笔过程中无法使用手势操作切换PPT,可以在底部的快速导航中翻页。

8

7. 聊天室管理

   在「互动聊天区 - 聊天」中,可以与观众文字图片互动,开启和关闭聊天室。长按观众发言内容,可对复制、删除选中聊天记录,可禁言或踢出发言者。

   在「在线」中,可以看到在线观众情况,若有违规观众,可以点击禁止按钮,将其踢出。踢出后观众将24小时无法观看直播,若有误踢的情况,请联系直播管理员或进入「直播管理后台 - 频道后台 - 直播监控 - 在线列表 - 踢出名单」中解除踢出。

910

8. 连线

   上课后,在「快速操作区- 连线」中可以发起「视频连线」或「音频连线」。

11

   开启连麦后,等待观众举手并允许连线后,即可与观众实时连麦互动。

1213

   如需要结束连线,可以在「快速操作区- 连线」中点击挂断,或点击需要挂断的连线观众头像,在弹出菜单中点击挂断即可。

   在弹出菜单中,可控制连线观众的摄像头和麦克风权限。
   目前最大支持连线人数为6人。

14

9.兼容性说明

   目前「讲课啦」app暂未支持互动连线功能,如签到、公告、答题卡、问卷、抽奖等。

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

云课堂(3.9.x)使用手册

云课堂(3.9.2)使用手册

1. 环境准备

 (1) 硬件准备

   电脑硬件推荐配置

    系统:win7系统以上

    显卡:独立2G显卡或以上

    CPU:i5或以上

    内存:4G或以上

   可选硬件

    拍摄:外置摄像头,摄像机+采集卡

    收音:小蜜蜂,耳机麦克风,专业麦克风

    外放:耳机,外置扬声器

    现场:绿色、红色、蓝色幕布

    网络:网线,4G网络聚合器

 (2) 客户端安装

   从官网下载「POLYV云课堂」客户端,根据提示安装到本地,点击开启直播即打开客户端。

   注:安装时若弹出360等安全软件的拦截提示,请选择允许此程序所有操作。

 (3) 网络环境

   建议使用有线网络。若使用WIFI或手机网络,需确保直播场地内信号稳定。

   直播受上行带宽影响,上行带宽至少2Mbps,建议上行带宽4Mbps或以上。

   带宽测试地址:http://www.speedtest.cn

   测试方法:

   1) 打开网页,选择就近的节点,若已是当地节点,则默认即可

   2) 点击开始测试

   3) 测试结束后查看「上传」带宽,若上传带宽不足4Mbps,请更换更稳定、带宽更大的网络,避免影响正常直播

   4) 多次测试得到的平均数据更准确

12

 (4) 频道准备

   发起直播需要使用频道号,一个频道号相当于一个直播间。频道号在「直播后台」创建,或者由管理员提供。

   创建频道流程可参考:后台使用手册「管理后台- 频道的创建、分类、删除、修改 - 创建直播间」

2. 启动客户端

 (1) 角色说明

   云课堂支持「讲师」、「嘉宾」、「连麦参与者」三种角色身份登录。

   「讲师」:通过频道号和密码登录。登录后,可添加文档、多媒体,共享屏幕,使用画笔,发起连线,允许连线等操作。同时可以管理聊天室,发起互动应用。

   「嘉宾」:通过嘉宾号和密码登录。登录后,可以翻页讲师加载的文档,添加多媒体,共享屏幕等操作。可以配合讲师管理聊天室,发起互动应用。

   「连麦参与者」:通过频道号和参与者密码登录。登录后为观众身份,可实时无延迟观看直播,讲师可以随时邀请连麦参与者上麦,无需连麦参与者额外举手。讲师授予画笔或者主讲权限后,可以参与讲课。可像普通观众一样参与聊天区互动发言和私聊提问。

3456

 (2)网页启动登录(仅讲师)

   点击「直播后台- 对应频道 - 直播链接 - 讲师链接」或「频道后台 - 直播间管理 - 直播间 - 启动链接」可以进入「启动页面」,如果本地已安装客户端,启动页会自动唤起客户端,也可以手动点击「启动客户端」唤起。如未安装,可以点击「下载客户端」下载并安装客户端。

7

   若本地客户端版本过低,会提示更新,点击「立即更新」,等待安装包下载完成。若网络不稳定会出现更新失败,请更换稳定网络后点击重试。

 (3)本地启动登录

   打开本地客户端,输入「三分屏」场景的频道号、嘉宾号和密码或参与者密码登录。

   昵称输入后会在在线列表中显示,方便讲师、嘉宾、观众辨识。若无输入,则会使用后台默认的昵称。

8

3. 主界面介绍

   打开客户端后可以看到主界面,一共可分为3个大区,「成员管理区」,「文档操作区」,「互动功能区」。

   「成员管理区」:可以看到观众在线详情及权限情况。

   「文档操作区」:可以操作画笔、白板、PPT文档,观众连线以后,连线观众会出现在顶部。

   「互动功能区」:包含聊天室以及互动应用。

9

4. 设备检测

   直播会可能会用到「摄像头」,「麦克风」,「扬声器」等硬件,请根据需要自行检测。若有需要使用数位板、高拍仪、翻页笔等设备,请按照硬件产品说明书使用,云课堂客户端支持大部分教学硬件设备。

   「摄像头」:启动客户端后,「成员管理区」上方会自动加载默认摄像头设备,若无画面或者需要更换设备,请点击顶部菜单栏右上角「齿轮」按钮,选择摄像头标签,选择需要显示的设备。

   「麦克风」:点击顶部菜单栏右上角「齿轮」按钮,选择麦克风标签,对着麦克风说话,若波动条有绿色波动,则设备正常。若无波动或波动较小,可以调整麦克风音量条。若出现设备不可用的情况,请更换设备后在设备列表中选择新设备。

   「扬声器」:点击顶部菜单栏右上角「齿轮」按钮,选择扬声器标签。这里影响的是连线以后,观众发言的声音大小。若本地听到声音较小,可以在这里调大,或者在「成员管理区」下方的扬声器按钮调节。建议使用耳机收听,避免外放的声音被麦克风收录,导致循环噪音。

101112

5. 摄像头设置

   客户端会自动加载默认摄像头设备,点击顶部菜单栏右上角「齿轮」按钮,可以修改输出画面的比例和分辨率。共享屏幕显示器选项适用于双屏或多屏显示场景,可提前设置好默认共享显示屏。以及调整视频连线后的混流布局。混流布局详细介绍见下节。

14

6. 混流布局

   混流布局为连线后各「连线者」画面布局情况。包含「单人模式」、「多人模式」、「主讲模式」三种模式。

   「单人模式」:只显示一个视频画面,默认为讲师的画面,可以由讲师设置参与连线的观众、嘉宾、连麦参与者为主画面,代替讲师画面。

   「多人模式」:所有连线者的画面都出现在视频区域,各个画面等大平铺。

   「主讲模式」:所有连线者的画面都会出现在视频区,默认讲师画面最大化,其他连线者为小图平铺在讲师画面下端,可以由讲师设置连线者其一为主画面,与讲师画面位置互换。

13

7. 使用PPT

   点击「上课」按钮旁的「文件夹」按钮,在菜单中选择「文档管理」,即可使用云文档。

14

 (1) 操作说明

   点击添加按钮,选择需要加载的文档。建议使用Microsoft Office转出的文档文件。

   若为Office转出的PPT文档,选择完成后会提示选择「快速转换」或「动画转换」。

   「快速转换」的转换时间较短,转换后应用不含动画效果。

   「动画转换」的转换时间较长,应用后含原文档动画效果。

   等待转换完成,状态提示「成功」,点击应用即可。

15

 (2) 常见问题

   i. 不支持加密文档,加密文档会无法转码。

   ii. 目前支持ppt、pptx、doc、docx、xls、xlsx、pdf格式,文档页数不超过1000页,文档大小不超过200M。

   iii. 若文档已上传但未出现在列表中,点击「刷新」重试或「重新上传」。

   iv. 若应用后出现样式、字体不对的情况,请先将文档转为PDF后上传。

8. 共享屏幕

   点击「上课」按钮旁的「屏幕共享」按钮,选择「屏幕共享」(全屏)或「区域共享」(可调整共享位置),即可开启屏幕共享功能。

16

   开启后,客户端会收起为「精简模式」,仅保留「互动功能区」。点击界面上方的「双向箭头」即可恢复完整客户端。注意,恢复完整客户端后,会出现循环嵌套的画面情况,此为正常现象。因此不建议共享屏幕时常开完整客户端。

   将鼠标移动到「屏幕顶部中间」位置,可以唤起「控制条」。支持开关麦克风、最小化客户端,退出共享,上/下课等操作。

17

9. 添加多媒体

   点击「上课」按钮旁的「文件夹」按钮,在菜单中选择「多媒体」。选择要播放的多媒体文件。

18

   新添加的视频会覆盖摄像头画面,默认暂停状态,点击即可播放,支持循环播放。播放多媒体时,为了避免客户端重复收录声音,本地无多媒体声音外放,观众端声音正常播放。

   建议单个视频大小不超过2G的视频,因为直播自身会比较占CPU资源,若此时再加载多个较大的视频文件,会造成电脑负载过高。

10. 聊天互动

   打开客户端后,自动加载「互动功能区」,包含「聊天」,「提问」,「互动应用」,三个板块。

   在「聊天」中,可以和观众聊天互动,支持发送文字、表情、图像,讲师端无字数上限,但无法手动换行。开启禁止聊天后,聊天室关闭,仅讲师、管理员、助教可以发言。针对已发出的消息,讲师可以删除管理员及讲师以外的发言,将鼠标移动到需要删除消息,单击删除按钮即可。

   在「提问」中,可以回答观众的私聊提问,也可以和管理员、助教一对一私聊。

   「互动应用」见下节。

19

11. 互动应用

   点击「互动功能区- 互动应用」,进入互动应用页,可以使用「公告」、「签到」、「答题卡」、「问卷」、「抽奖」、「分享」6个应用功能。

20

 (1) 公告

   点开后可输入公告内容,不超过200字的纯文字文本,点击上方「链接」按钮,可以添加链接。点击确认发布即发出公告,发布后可关闭、编辑新公告发布或删除,删除后无法恢复。

212223

 (2) 签到

   点开后可编辑签到提示语,设置0~1200秒的签到时间,也可以查询历史签到记录。点击开始签到,所有观众都会受到签到提醒,可点击停止签到提前结束。签到结束后会返回签到结果。

24252627

 (3) 答题卡

   答题卡分为「快速答题卡」和「普通答题卡」。

   「快速答题卡」:无题目和选项内容,需要配合PPT内容或讲师口述使用。
28293031

   「普通答题卡」:要现场输入题目、选项、正确选项,或提前下载模板,按照模板格式设计题目并上传,直播中直接发出。普通答题卡有单选、多选、评分3个选项,操作上一致,在观众端和结果显示上略有不同。

   发出答题卡后,可实时看到答题结果。若为「普通答题卡」,答题结束后可以发送结果给观众。

323334353637

 (4) 问卷

   问卷和答题卡相似,可以现场拟写和模板上传,上传模板后可再次编辑问卷,最多可设定100道题目。提前在客户端填写的问卷可以在线保存,直播时直接发送。

   问卷有三种题型:单选、多选、问答。单选多选可设置答对得分。发送问卷后,可以看到交卷人数。停止问卷答题后,可以查看回答比例。

   编辑问卷时,可选择此问题为「选填」或「必填」,观众问答题的答案可在直播的后台「账号统计- 互动统计 - 问卷」中查询。

3839404142

 (5) 抽奖

   点击抽奖按钮,可以编辑奖品名称、参与用户(全体在线或未中奖的在线观众)、中奖人数、是否预设中奖人等。以及可以自定义需要收集的中奖用户信息模板,用于中奖观众填写个人信息,方便工作人员联系验证,姓名电话必选。

   中奖人信息可在直播的后台「账号统计- 互动统计 - 中奖记录」中查询。

434445

 (6) 分享

   点击分享按钮,会弹出直播链接和二维码,可直接分享。

46

12.连线功能

    在「已直播」的状态下,在线列表上方的「举手连线」按钮生效,点击后可选择「视频」或「纯音频」的连线模式。

47

   待观众举手后,点击「允许」,即可与观众连线。连线成功后,观众会出现在「连线互动区」中。若需要结束当前观众连线,点击「挂断」,若需要结束连线,点击「结束连线」即可。

4849

   嘉宾登录客户端后默认连线,允许连线的角色有观众、嘉宾、连麦参与者,最高支持同时连线16个角色。

   观众:目前支持连线的观众端有PC-Web端(需要谷歌内核58以上的浏览器,建议为最新的谷歌浏览器或QQ浏览器)、live学一学、小程序SDK、APP-SDK,连线后仅能参与视频互动,无法操作ppt或画笔。

   嘉宾:功能和讲师相近,有嘉宾标识。嘉宾登录客户端后自动与讲师视频连线,讲师赋予「主讲」权限后,可以作为主讲嘉宾讲课。由管理员分配账号密码,最多可创建6名助教。

   连麦参与者:功能与嘉宾相近,身份为观众。通过统一密码登录客户端后,可以实时看到讲师画面,可被讲师邀请连线。讲师赋予「主讲」权限后,可操作PPT和画笔与讲师及其他观众互动。由管理员分配密码,无创建上限。

13. 本地录制

   直播云端有自动录制,若本地需要录制,可以在客户端中开启。点击顶部菜单栏右上角「齿轮」按钮,选择「基本设置」标签,勾选「开启本地录制」即可。

   录制的视频为整个客户端的界面。若希望实现纯文档和视频头像的录制文件可在页面管理后台中设置「重制课件」。

50

14. 常见问题

 (1) 信号塔亮黄,甚至断开了怎么办

47

   信号塔亮黄为网络信号不佳,可能影响到直播,请及时更换网络,或联系IT技术人员处理。

 (2) 直播没有声音

   观众如果使用谷歌内核的浏览器(谷歌,QQ浏览器、360浏览器极速模式),浏览器对陌生网站会采用静音策略,需要观众手动开启。

   如果讲师端没有声音,请点击顶部菜单栏右上角「齿轮」按钮,看讲话时麦克风是否有波动条,若无请查看麦克风是否没占用或禁用,或更换设备尝试。

 (3) CPU显示超过了50%怎么办

   直播是比较占用CPU、显卡、网络资源的,请关闭非必要软件后重试。若关闭后无效,请重启电脑,仅打开与直播相关的软件,或更换更好的电脑设备。

 (4) 共享屏幕黑屏

   共享屏幕或窗口出现黑屏,无法采集画面的情况(多出现在win10系统中),主要是由于显卡交互的原因(双显卡),默认显卡不支持采集。

   解决办法是在电脑上找到“我的电脑”(win10下是此电脑)-右键-管理-设备管理器-显示适配器-禁用第一个默认显卡即可。

 (5) 软件闪退

   使用软件过程中出现软件闪退并弹出提示框时,需要拿取一下本地日志,日志路径:C:\ProgramData\polyv-studio\crashes(崩溃日志)、C:\ProgramData\polyv-studio\logs(业务日志)。将这两个路径下修改日期是对应时间的日志txt文件复制下来提交给技术,并说明闪退时的具体操作即可。

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

获取频道广告列表

接口URL

http://api.polyv.net/live/v3/channel/advert/list

接口说明

1、提供获取频道轮播广告列表信息,频道广告为空时,获取全局广告
2、支持https

支持格式

JSON

请求方式

GET

请求参数

参数名 必选 类型 说明
appId string 账号应用下的appId
timestamp string 当前时间的秒级时间戳(13位)
sign string 签名,为32位大写的MD5值
channelId int 频道号

操作成功响应示例

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": [
        {
            "text": "",
            "img": "//liveimages.videocc.net/uploaded/images/2019/09/ffmgstpk58.png",
            "href": ""
        },
        {
            "text": "123445",
            "img": "",
            "href": ""
        }
    ]
}

操作失败响应示例

签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

缺少参数 channelId

{
    "code": 400,
    "status": "error"
    "message": "param should not be empty: channelId",
    "data": ""
}

响应字段说明

名称 类型 说明
code string 响应代码,成功为200,失败为400,签名错误为403,异常错误500
status string 成功为success,失败为error
message string 错误时为错误提示消息
data object[] 成功响应数据
text string 文本广告内容
img string 图片广告链接
href string 跳转链接

php请求示例

<?php
//引用config.php
include 'config.php';

$params = array(
    'appId' => $appId,
    'timestamp' => $timestamp,
    'channelId' => 206204
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法
$params['sign'] = $sign;

//接口请求url
$url = "https://api.polyv.net/live/v3/channel/advert/list?appId=".$appId."&sign=".$sign."&timestamp=".$timestamp."&channelId=".$channelId;
//输出接口请求结果
echo file_get_contents($url);

?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

iframe 方式嵌入观看页

若想快速将Polyv直播部署到自身的域名下,可简单通过iframe 引入polyv观看页

普通直播嵌入

示例代码(满屏嵌入,将占满整个浏览器窗口)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>普通直播iframe demo</title>
  <style>
  /* 将根元素占满浏览器 */
    html,body {
      margin: 0;
      padding: 0;
      width: 100%;
      height: 100%;
    }
    iframe {
      margin: 0 auto;
      display: block;
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
<!-- 将 "{{频道号}}" 更换为具体频道号 -->
  <iframe src="https://live.polyv.cn/watch/{{频道号}}" frameborder="0" allowfullscreen="true"></iframe>
</body>
</html>
  • 请pc下尽量将iframe宽度设置为大于或等于1024px,否则会出现横向的滚动条
  • 移动端嵌入建议满屏嵌入,以防出现一些兼容问题

云课堂嵌入

示例代码(满屏嵌入,将占满整个浏览器窗口)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>云课堂iframe demo</title>
  <style>
    /* 将根元素占满浏览器 */
    html,body {
      margin: 0;
      padding: 0;
      width: 100%;
      height: 100%;
    }

    iframe {
      margin: 0 auto;
      display: block;
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
  <!-- 将 "{{频道号}}" 更换 -->
  <iframe src="https://live.polyv.cn/watch/{{频道号}}" frameborder="0" allowfullscreen="true"></iframe>
</body>
</html>
  • 云课堂嵌入与普通直播一样,但在pc下宽度请设置在1196px或1196px以上,否则会出现横向滚动条
  • 移动端嵌入建议满屏嵌入,以防出现一些兼容问题

可设置参数 —— hasFrame(适用于云课堂)

设置为1后会页面隐藏直播介绍,页面菜单(页面底部),语言设置,主播放器上的分享频道信息栏,适合局部嵌入iframe
示例代码

  <iframe src="https://live.polyv.cn/watch/12345?hasFrame=1" frameborder="0" allowfullscreen="true"></iframe>

设置hasFrame=1后因为页面底部隐藏,可设置固定高度使竖向滚动条隐藏,使页面嵌入更像在本页面的代码

iframe {
      margin: 0 auto;
      display: block;
      width: 100%;
      height: 718px;
    }

  @media (min-width: 1500px) {
    iframe {
      height: 824px;
    }
  }
  • 嵌入后台回放地址如 https://live.polyv.cn/watch/12345?vid=12345的链接效果与设置hasFrame样式效果一样,也可参考上述的样式设置

iframe 权限设置

连麦

  • 若需要连麦,需要在iframe中添加allow属性,允许iframe获取摄像头与麦克风设备
  • iframe 地址必须是https,本地调试可使用localhost访问,不受协议限制
  <iframe src="https://live.polyv.cn/watch/{{频道号}}" frameborder="0" allowfullscreen="true" allow="microphone; camera"></iframe>

全屏

  • 允许全屏可添加属性 allowfullscreen="true",否则iframe无法进入全屏

注意事项

1、使用自定义授权直接(独立)授权外部授权时请嵌入 https 协议的观看页
2、安卓微信进入iframe观看页的页面白屏,观看页在微信端会默认经过微信的授权,获取观众的头像和昵称,如需使用iframe观看页链接的方式观看,需要结合外部授权或自定义授权观看条件使用,或者联系保利威单独关闭该频道的微信授权步骤,否则在安卓微信端打开将显示白屏。
3、更多iframe设置可参考 iframe 设置参考

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

直播 JavaScript SDK 使用文档

概述

该SDK是用于web端接入POLYV直播服务,包括云课堂和直播助手发起的直播的web端观看,POLYV聊天室服务,兼容PC以及移动端观看。

快速开始

第一步:引入直播SDK

<script src="https://player.polyv.net/livesdk/polyv-live.min.js"></script>

第二步:创建初始化ppt与讲师画面元素

<div id="ppt" style="width:500px;height:300px;"></div>
<div id="player" style="width:500px;height:300px;"></div>

第三步:创建SDK实例

var liveSdk = new PolyvLiveSdk({
  channelId: channelId,
  sign: sign, // 频道验证签名
  timestamp: timestamp, // 毫秒级时间戳
  appId: appId, // polyv 后台的appId
  user: {
    userId: userId,
    userName: 'polyv-test',
    pic: '//livestatic.videocc.net/assets/wimages/missing_face.png'
  }
});

第四步:监听频道信息读取完成事件,初始化播放器

// 监听频道信息并初始化播放器
liveSdk.on(PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT, (event, data) => {
  liveSdk.setupPlayer({
    pptEl: '#ppt',
    el: '#player',
    type: 'auto'
  });
});  

API

PolyvLiveSdk 是用于创建SDK实例的类

类方法

PolyvLiveSdk.getChannelInfo(channelId: string, appId: string, sign: string, timestamp: number): Promise

获取频道信息

PolyvLiveSdk.previewPPT(config: previewConfig): PreviewPPT

预览指定的ppt
参数说明

interface previewConfig {
  el: DOMSeletor;  // 需要显示预览ppt的dom选择器
  autoId: number|string;  // pptId
  type: string;  // ppt类型
  width?: number|string;  // ppt宽,默认100%
  height?: number|string; // ppt高,默认100%
  pptNav?: boolean; //是否显示ppt控制控件,默认`true`  
  pptNavBottom?: string`; //ppt控制栏距离底部距离,例:`pptNavBottom: '50px'` 
}

实例方法
PreviewPPT.nextPPTPage(): void 使ppt切换到下一页,跟随模式下不能切到讲师未讲解的ppt
PreviewPPT.prevPPTPage(): void 使ppt切换到上一页

实例事件
success: 实例创建成功
error: 预览失败
pptStatusChange: 当前页改变,与liveSdk.player 上的事件一致

返回值 PreviewPPT
示例代码

var previewPPT = PolyvLiveSdk.previewPPT({
  el: '#previewPPT',
  autoId: 123,
  isAnimate: true,
  type: 'new',
});

previewPPT.on('success', function() {
  console.log('预览成功');
});

previewPPT.on('error', function(err) {
  console.log('预览失败', err);
});

// 销毁ppt预览实例
//previewPPT.destroy()
  • 当前频道的ppt列表可通过接口获取 -> 接口文档
  • 接口请求中的参数 status 建议设置 normal,请求成功处理的ppt

类属性

PolyvLiveSdk.emotionLists: { url: string; title: string: position: string }[]

polyv 表情数据列表
全部表情 sprites 图片地址: https://livestatic.polyv.net/assets/images/em/default.png

// 返回数据
[
  {
    url: '//livestatic.polyv.net/assets/images/em/2.png',
    title: '撇嘴',
    position: '-48px 0px' // sprites图位置
  }
]

PolyvLiveSdk.emotionSearch: object

键值对为 [表情title]: 表情url 的对象

实例设置

channelId: string

频道id, 支持云课堂/直播助手/大班课发起的直播

sign: string

POLYV 频道信息获取接口用到的签名 签名规则
请用channelId、timestamp、appId 三个字段拼接sign

timestamp: number

POLYV 频道信息获取接口用到的时间戳
- 注意:该时间戳需要与服务器端获取的签名一样

appId: string

POLYV账号 appId,从 POLYV 后台获取

user: { userId: string; userName: string; pic: string; }

用户信息设置
* user.userId: string : 用户id
* user.userName: string : 用户昵称
* user.pic: string : 用户头像,必须为是http/https/ // 开头链接

{
    userId: '自定义id', // 用户id
    userName: 'polyv-test', // 用户昵称
    pic: '//livestatic.videocc.net/assets/wimages/missing_face.png' // 用户头像
}

chat: boolean

是否连接聊天室,默认为true,在云课堂模式下如果调用直播播放器必须连接聊天室,所以即使设置为false,在初始化直播播放器时会自动连接聊天室,回放模式下可以不连接

param4?: stringparam5?: stringkey1?: stringkey2?: stringkey3?: string

播放器统计参数,param1、param2,param3被预设为userId和userName以及直播状态,所以设置无效

socket: SocketIOClient.Socket

SDK 支持传入外部传入 polyv 聊天室 socket ,传入后SDK不在连接socket,请在外部socket实例创建后就初始化SDK实例并把socket传入
示例代码(以polyv聊天室SDK为例)

var chatroom = new PolyvChatRoom({
  roomId: channelId,
  userId: userId,
  nick: userName,
  pic: pic,
  userType: 'slice'
});

var liveSDK = new PolyvLiveSdk({
  channelId: channelId,
  appId: appId,
  sign: sign,
  timestamp: timestamp,
  socket: chatroom.chat.socket,
  user: {
    userId: userId,
    userName: userName,
    pic: pic
  }
});

实例方法

setupPlayer(config: object)

初始化播放器,必须在频道信息事件触发时调用
参数:config 播放器配置对象

示例代码:

var config = {
    pptEl: '#ppt',
    el: '#player',
    type: 'auto',
    autoplay: false,
    audioMode: false,
    width: '100%',
    height: '100%',
    pptWidth: '100%',
    pptHeight: '100%',
    controllerPosition: 'ppt',
    controller: true,
    pptNav: true,
    // 回放模式需要fileId、url、sessionId
    fileId: undefined,
    url: undefined,
    sessionId: undefined
}
// 监听频道信息并初始化播放器
liveSdk.on(PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT, (event, data) => {
  liveSdk.setupPlayer(config);
});  

参数说明:
pptEl?: DOMSelectors:ppt文档元素选择器,非云课堂可不填
el: DOMSelectors:讲师区域元素
width?: string|number:讲师区域宽,默认'100%'
height?: string|number:讲师区域高,默认'100%'
pptWidth?: string|number:ppt区域宽,默认'100%'
pptHeight?: string|number:ppt区域高,默认'100%'
type?: string: 播放器播放类型,'auto'(根据频道实际设置自动选择播放类型)、'live'(直播)、'vod'(回放)、'record'(暂存), 默认'auto',选择'auto'后,播放器会以直播->回放列表视频->第一个暂存视频(优先级由大到小)的优先级播放
autoplay?: boolean:是否自动播放,默认false
audioMode?: boolean:讲师画面以音频模式播放, 默认false
controller?: boolean:是否显示控制栏, 默认true
controllerPosition?: string:控制栏现在在哪个区域 'ppt'(ppt区域)、'player'(讲师区域), 默认ppt
pptNav?: boolean:是否显示ppt控制控件,默认true
pptNavBottom?: string:ppt控制栏距离底部距离,例:pptNavBottom: '50px'
fileId: string: ppt数据id,回放模式必填
url: string: 回放视频链接,回放模式必填
sessionId: string:回放场次id,回放模式必填
vid: string: 回放id,回放模式下传入该参数可不传fileIdurlsessionId

liveSdk.reloadPlayer(): void

重新加载播放器,目前支持播放器播放类型为live场景的使用,比如当前客户端没有推流,用户打开了页面,过一段时间后客户端开始推流可以调用该方法刷新播放器

liveSdk.setupPlayer({
  // ... 
  type: 'live'
  // ...
});

// 监听流状态变化刷新播放器
liveSdk.on(PolyvLiveSdk.EVENTS.STREAM_UPDATE, function() {
  liveSdk.reloadPlayer();
});

liveSdk.switchVod(sessionData: object)

换回放场次,用于切换具体播放场次视频
参数:sessionData 需要播放场次的场次数据
示例代码

// data数据是该场次数据,可通过liveSdk.getPlaybackLists(...) 获取
liveSdk.switchVod({
  fileId: data.videoId,
  url: data.url,
  sessionId: data.channelSessionId
});
//or 
liveSdk.switchVod({
  vid: data.videoPoolId
});

liveSdk.getPlaybackLists(page: number, pageSize: number): Promise

获取回放列表
示例代码:

liveSdk.getPlaybackLists(1, 5)
.then(function(data) {
    console.log(data);
});

参数:
page: number: 页数
pageSize: number: 每页条数

liveSdk.getChapterLists(fileId: string, type: string): Promise

获取章节列表
参数:
fileId: string: ppt数据id
type: string:章节类型, playback(回放)、record(暂存)
- @return Promise

liveSdk.send(message: string): void

发送聊天消息
参数:
message: string:聊天内容

liveSdk.sendQuestion(message: string): void

向讲师发送问答私聊信息
参数:
message: string: 私聊信息

liveSdk.sendAnswer(option: string, questionId: string, callback: Function): void

发送答题卡回答内容
参数:
option: string: 答题卡答案A/ABC
questionId: string: 答题卡题目id
callback: Function: 发送成功回调

liveSdk.sendCustomMessage(messsage: object): void

发送自定义消息,聊天室会广播这些信息,由用户自行定义数据结构
示例代码

liveSdk.sendCustomMessage({
  EVENT: 'customA',
  data: '自定义信息'
});

liveSdk.getHistoryMessage(): Promise

获取历史聊天记录,默认10条

liveSdk.destroy(disconnectSocket: boolean = true): void

销毁播放器示例
参数:
disconnectSocket: bolean: 是否断开socket

liveSdk.toSign(checkinId: string, callback: Function): void

发送签到
参数:
checkinId: string: 签到id
callback: Function: 发送签到回调

liveSdk.sendQuestionnaireAnswer(questionnaireId: string, answer: [], callback: Function): void

发送问卷答案
参数:
questionnaireId: string: 问卷Id
answer: []:答案列表, 与文档 ANSWER_QUESTIONNAIRE中的result一致
callback: Function: 发送回调
示例代码:

liveSdk.sendQuestionnaireAnswer('fdp9u1x022', [
  // ...
  {
  questionId: '48e5afd460', answer: 'B'
  },
  // ...
])

liveSdk.getCloudClassRoomStatus(): Promise

查询当前频道直播状态
示例代码:

liveSdk.getCloudClassRoomStatus()
.then(function(resp) {
  if (resp.status === 'success') {
    // liveStart(开始上课)、liveRecovery(恢复)、liveSuspend(暂停)、liveFinish(结束)
    console.log('当前直播状态为:' + resp.data.status);
  }
});

实例 player 对象

liveSdk.player: 调用 setupPlayer 后创建的播放器实例,可用于控制播放器播放相关交互

对象属性

liveSdk.player.currentTime: number: 当前播放的进度
liveSdk.player.duration: number: 视频时长
liveSdk.player.playbackRate: number: 当前倍速
liveSdk.player.volume: number: 当前音量
liveSdk.player.cameraStatus: boolean: 当前讲师摄像头是否被关闭
liveSdk.player.paused: boolean: 当前是否是暂停播放状态
liveSdk.player.supportFullScreen:boolean: 是否支持全屏
liveSdk.player.fullScreen:FullScreen:播放器全屏实例,里面封装了进入全屏以及退出全屏的方法,可对于页面任意DOM操作
liveSdk.player.lines: number:当前频道有多少条线路,需要在loadedmetadata时间后访问
liveSdk.player.line: number:当前播放的线路 0/1
liveSdk.player.currentPPTPage:当前展示的ppt页码,若当前显示PDF或者白板则返回1
liveSdk.player.totalPPTPages: 当前使用的ppt总页数,若当前使用PDF或者白板则返回1
#####全屏示例说明
liveSdk.player.fullScreen.request($dom: HTMLElement): void:将指定元素进入全屏状态
liveSdk.player.fullScreen.exit(): void:退出全屏状态

对象方法

liveSdk.player.setVolume(volume: number): void: 设置播放器音量,范围[0, 1]
liveSdk.player.play(): void:恢复播放视频
liveSdk.player.pause(): void:暂停播放视频
liveSdk.player.togglePlay(): void:交替恢复暂停播放视频
liveSdk.player.resize(): void:刷新ppt尺寸,播放期间如果对ppt容器尺寸有改变ppt尺寸可能异常,再改变尺寸后调用该方法恢复正常尺寸
liveSdk.player.seek(time:number): void:请求到指定播放位置
liveSdk.player.setRate(rate: number): void:切换倍速,可选0.5、1、1.25、1.5、2
liveSdk.player.switchCamera(hide: boolean): void:关闭或显示讲师摄像头
liveSdk.player.switchLine(line: number): void:切换当前线路,line由number 0递增,代表线路1、线路2...
liveSdk.player.switchPPTDocMode(control: boolean): boolean:直播时切换ppt模式,设置true ppt可由用户自己控制ppt内容,不跟随客户端控制(自由模式),反之。调用返回是否切换成功(跟随模式)
liveSdk.player.nextPPTPage(): void 使ppt切换到下一页,跟随模式下不能切到讲师未讲解的ppt
liveSdk.player.prevPPTPage(): void 使ppt切换到上一页

对象事件

playing: 恢复播放
pause: 暂停播放
timeupdate: 播放进度更新
loadedmetadata: 视频加载成功可以准备播放,可对播放器进行play()、pause()等操作
ended:播放结束
ratechange:倍速改变
volumechange:音量改变
lineChanged:线路改变

liveSdk.player.on(lineChanged, function(line) {
  console.log(line); // 0/1...
});

error:视频播放错误
示例代码

liveSdk.player.on('playing', function() {
  console.log('恢复播放');
});
liveSdk.player.on('pause', function() {
  console.log('暂停播放');
});
PPT操作相关事件

whiteboardOpened: 讲师打开白板
whiteboardClosed: 讲师关闭白板,恢复为PPT
pptStatusChange: ppt状态改变,包括当前页数改变(ppt更换、ppt与白板切换 ),翻页,注意白板状态时不能翻页
示例代码

liveSdk.player.on('pptStatusChange', function(data) {
  /*
  {
    page: 3,  // 当前是第几页
    total: 30, // 当前ppt总页数
    type: 'ppt' // ('ppt'|'whiteboard') 当前显示类型,ppt或白板
  }
  */ 
  console.log(data);
});

实例事件

事件方法

liveSdk.on(event: string, func: Function)

事件监听方法
event: string: 绑定事件名称
func: (event: string, data: object): void:事件回调函数

liveSdk.once(event: string, func: Function)

绑定事件,只触发一次
event: string: 绑定事件名称
func: (event: string, data: object): void:事件回调函数

liveSdk.off(event: string, func: Function)

解除事件绑定
event: string: 绑定事件名称
func: Function: void:事件回调函数

liveSdk.on(PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT, function(event, data){});

事件列表

PolyvLiveSdk.EVENTS.CHANNEL_DATA_INIT

  • 频道信息获取完成
  • data为频道信息

PolyvLiveSdk.EVENTS.PLAYBACK_INIT

  • 回放章节初始化完成
  • data: 场次数据
    javascipt
    {
    sessionId: '123',
    fileId: '123'
    }

PolyvLiveSdk.EVENTS.STREAM_UPDATE(event, status)

  • 流状态更新,可用来判断当前有无直播在推流
  • status (live|end)

PolyvLiveSdk.EVENTS.SPEAK

  • 非本人的用户发言
  • data:聊天信息
 {
  EVENT: 'speak',
  content: 'test',  // 聊天具体内容
  currentUser: false, // 是否为当前用户
  custom: false, // 是否是自定义消息
  formatTime: '2019-07-02 14:12',
  id: '65975130-9c90-11e9-94b0-fd61e3983999',  // 消息id
  reward: false,
  time: 1562047960506,
  // 用户信息
  user: { 
        banned: false,
        channelId: '275682',
        clientIp: '61.144.146.199',
        nick: 'polyv',
        pic: '//livestatic.videocc.net/v_314/assets/wimages/missing_face.png',
        roomId: '275682',
        sessionId: 'f8qnsda4zq',
        uid: 'Ph4UtYfnxQo7pZK6AkbP',
        userId: '1562047951865',
        userType: 'slice',
      }
 }

PolyvLiveSdk.EVENTS.SEND_MESSAGE

  • 本人的发言
  • data: 与PolyvLiveSdk.EVENTS.SPEAK一致

PolyvLiveSdk.EVENTS.S_QUESTION

  • 发送提问消息回调
  • data:提问数据
{
  EVENT: 'S_QUESTION',
  content: '1+1=多少',
  currentUser: true,
  custom: false,
  reward: false,
  roomId: '275682',
  user: {
    // ... 用户信息
  }
}

PolyvLiveSdk.EVENTS.T_ANSWER

  • 管理员或讲师回答提问
  • data:回答的数据
{
  EVENT: 'T_ANSWER'
  content: '等于2'
  roomId: '275682'
  s_userId: '1559030433536', // 被回答用户id
  user: {
    // ... 用户信息
  }
}

PolyvLiveSdk.EVENTS.CUSTOM_MESSAGE

  • 收到自定义消息
  • data:具体数据结构由用户自行定义

PolyvLiveSdk.EVENTS.REMOVE_HISTORY

  • 清除聊天记录,页面可收到该消息后清除页面聊天内容

PolyvLiveSdk.EVENTS.REMOVE_CONTENT

  • 清除某一条聊天信息,页面可收到该消息后清除相应聊天内容
  • data:被删除消息内容
{
  EVENT: 'removeContent',
  id: '65975130-9c90-11e9-94b0-fd61e3983999', // 被删除消息的id
  roomId: '275682'
}

PolyvLiveSdk.EVENTS.HISTORY_MESSAGE

  • 获取历史聊天信息完成
  • data:历史聊天信息,内容为speak事件内容组成的数组

PolyvLiveSdk.EVENTS.PROHIBIT_TO_SPEAK

  • 发言失败,可能由于聊天室为连接但发送聊天消息等发送错误触发

PolyvLiveSdk.EVENTS.ADD_SHIELD

  • 当前用户被禁止发言

PolyvLiveSdk.EVENTS.REMOVE_SHIELD

  • 当前用户被恢复发言

PolyvLiveSdk.EVENTS.LOGIN(event, data)

  • 频道内用户登录事件
  • data: 用户信息
// 用户加入信息
{
  EVENT: 'login',
  onlineUserNumber: 3,
  timeStamp: 1562051459569,
  user: {
    // 用户信息
  }
}

PolyvLiveSdk.EVENTS.LOGOUT(event, data)

  • 频道内用户退出事件
  • data: 用户信息
{
  EVENT: 'loginOut',
  channelId: '275682',
  onlineUserNumber: 2,  //当前在线人数
  roomId: '275682',
  timeStamp: 1562051345281,
  uid: 'LVexVHpKvK0KOU_0Ak4L',
}

PolyvLiveSdk.EVENTS.LOGIN_REFUSE

  • 频道内有用户被踢出房间,包含用户以及本身
  • data: 被踢用户数据
{
  EVENT: 'LOGIN_REFUSE',
  data: {referField: '1559030433537', type: 'userId'}
}

PolyvLiveSdk.EVENTS.BAN_USER_ROOM

  • 当前用户被踢出房间,这时候会自动断开聊天室连接

PolyvLiveSdk.EVENTS.LOGIN_KICK

  • 用户登录聊天室时如果已经被提出房间会收到该事件

PolyvLiveSdk.EVENTS.SIGN_IN

  • 收到讲师发起签到消息
  • 可调用 liveSdk.toSign 方法发送签到
  • 签到数据
{
  EVENT: 'SIGN_IN',
  data: {
    checkinId: '07ff9330-9c99-11e9-8aa1-37da87', // 签到id
    createTime: 1562051668963,
    limitTime: '30', // 签到时间,页面需要根据这个时间显示倒计时,结束后不允许再签到
    message: '各位同学开始签到了' // 签到提示文案
  }
  roomId: '275682'
}

PolyvLiveSdk.EVENTS.STOP_SIGN_IN

  • 收到讲师停止签到消息,收到后不允许发送签到

PolyvLiveSdk.EVENTS.BULLETIN

  • 收到公告消息
  • data:公告消息
{
  EVENT: 'bulletin',
  content: '公告内容'
}

PolyvLiveSdk.EVENTS.REMOVE_BULLETIN

  • 删除公告消息

PolyvLiveSdk.EVENTS.START_QUESTIONNAIRE

  • 收到问卷消息, 回答后可使用liveSdk.sendQuestionnaireAnswer 方法发送答案
  • data: 问卷内容
  • 问卷消息内容,与polyv 聊天室 START_QUESTIONNAIRE 事件数据一致 查看

PolyvLiveSdk.EVENTS.STOP_QUESTIONNAIRE

  • 讲师停止问卷
  • data: 消息内容

PolyvLiveSdk.EVENTS.GET_TEST_QUESTION_CONTENT

  • 答题卡: 获取问题内容
  • data: 答题卡消息,可查阅 文档 答题卡部分

PolyvLiveSdk.EVENTS.GET_TEST_QUESTION_RESULT

  • 答题卡: 获取答题结果

PolyvLiveSdk.EVENTS.STOP_TEST_QUESTION

  • 答题卡: 停止答题

PolyvLiveSdk.EVENTS.ON_PAUSE_RECORD

  • 直播录制暂停(课间休息)

PolyvLiveSdk.EVENTS.ON_START_RECORD

  • 恢复录制(休息结束,恢复直播)

PolyvLiveSdk.EVENTS.ON_EXIT_RECORD

  • 退出录制(下课)
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

通过文件ID获取录制文件信息

接口URL

https://api.polyv.net/live/v3/channel/record/get

接口说明

1、接口用于通过文件ID获取录制文件信息
2、接口支持https

支持格式

JSON

请求方式

GET

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
timestamp long 当前13位毫秒级时间戳,3分钟内有效
sign string 签名,为32位大写的MD5值
channelId string 频道号
fileId string 文件ID

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": {
        "bitrate": 0, 
        "channelId": 339382, 
        "channelSessionId": "fdl03sz2mx", 
       "createdTime": 1561719918000, 
       "duration": 78, 
       "endTime": "20190628190217", 
       "fileId": "d2c7428031a512a2f8c53da358f9695e", 
       "filename": "测试创建", 
       "filesize": 5110372, 
       "height": 720, 
       "liveType": "ppt", 
       "m3u8": "http://oss-live-1.videocc.net/record/record/recordf/edvf2fpec920190621142457386/2019-06-28-19-00-58_2019-06-28-19-02-16.m3u8", 
       "mp4": "http://oss-live-1.videocc.net/record/record/recordf/edvf2fpec920190621142457386/2019-06-28-19-00-58_2019-06-28-19-02-16.mp4",
       "startTime": "20190628190057",
       "userId": "edvf2fpec9", 
       "width": 1280
    }
}

响应失败JSON示例:

未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

字段说明

参数名 说明
code 响应的状态码,例如:200
status 响应状态
message 异常错误信息
data 响应结果集
bitrate 码率
channelId 频道号
channelSessionId 频道场次
createdTime 创建时间
duration 时长
endTime 结束时间
fileId 文件ID
filename 文件名
filesize 文件大小
height
liveType 直播类型
m3u8 m3u8文件地址
mp4 MP4地址
startTime 开始时间
userId 用户ID
width

php请求示例

<?php
//引用config.php
include 'config.php';
$params = array(
    'appId' => $appId,
    'timestamp' => $timestamp,
    'channelId' => 108888,
    'fileId' => '11111dadadadadade2323'
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法
$params['sign'] = $sign;

$url = "https://api.polyv.net/live/v3/channel/record/get?".http_build_query($params);

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);

echo $res;
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

导出合并的录制文件并回调mp4下载地址

接口URL

http://api.polyv.net/live/v3/channel/record/merge-mp4

接口说明

1、接口用于合并直播录制mp4文件
2、该接口为文件合并过程为异步处理过程
3、该接口合并的录制文件必须在8小时内
4、接口支持https
5、三分屏的录制将自动经过重制课件后再合并mp4
6、mp4下载地址30天内有效,超出后需要重新导出

请求方式

POST

请求参数

参数名 必选 类型 说明
appId string 管理员的appId
timestamp long 13位当前时间戳
sign string 签名值
channelId string 频道ID
startTime long 录制文件的开始时间,与endtime最大不能超过8小时
endTime long 录制文件结束时间的,与startTime最大不能超过8小时
callbackUrl string 合并成功或失败回调的url
fileName string 合并后文件名

响应成功JSON示例:

//提交的视频正在合并处理中
{
    "code": 200,
    "status": "success",
    "message": "",
    "data": {
        "fileId": "xxxxxxx",
        "fileUrl": ""
    }
}
//合并文件已存在
{
    "code": 200,
    "status": "success",
    "message": "",
    "data": {
        "fileId": "xxxxxxx",
        "fileUrl": "http://www.polyv.net/1.mp4"
    }
}

响应失败JSON示例:

// 未输入appId
{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}
// appId不正确
{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}
// 时间戳错误
{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}
// 签名错误
{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

字段说明

参数名 说明
code 响应代码,成功为200,失败为400,签名错误为403,异常错误500
status 成功为success,失败为error
message 错误时为错误提示消息
data 成功响应时为相关的信息
data.fileId 文件ID
data.fileUrl 已合并返回文件地址,合并中返回空字符串

php请求示例

<?php
//引用config.php
include 'config.php';

$params = array(
  'appId' => "填写获取到的appId",
  'timestamp' => "填写13位时间戳",
  'channelId' => "填写频道号",
  'startTime' => "开始时间",
  'endTime' => '结束时间',
  'fileName' => "合并测试",
  'callbackUrl'=> "http://demo.polyv.net/wfy/test.php"
);

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法


$url="http://api.polyv.net/live/v3/channel/record/merge-mp4";

function post($url, $post_data = '', $timeout = 5){
   $ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_POST, 1);
   if($post_data != ''){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
   }

   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   curl_setopt($ch, CURLOPT_HEADER, false);
   $file_contents = curl_exec($ch);
   curl_close($ch);
   return $file_contents;
}

$params["sign"] = $sign;
echo post($url, $params);
?>

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

回调说明

该接口为异步处理,如果需要获取合并的结果,可以在请求接口时提交callbackUrl 参数,在程序合并成功后,会对callbackUrl 进行回调通知

回调参数

参数 说明
status 接口处理结果,取值:success(成功),error(出错)
fileId 合并后的文件ID,成功时返回
fileUrl 合并后的MP4的地址,成功时返回
fileName 合并后的文件名称,成功时返回
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

上传文档到频道后台

接口URL

http://api.polyv.net/live/v3/channel/document/upload-doc

接口说明

1、作用:上传频道文档接口
2、说明:上传的文件不超过50M,格式限制为(ppt, pdf,pptx,doc,docx,wps, xls,xlsx)。
3、接口支持https协议

支持格式

JSON

请求方式

POST

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 从API设置中获取,在直播系统登记的appId
sign string 签名,32位大写MD5值
timestamp string 当前13位毫秒级时间戳,3分钟内有效
channelId string 频道ID
type string 转换类型(‘common’:转普通图片, ‘animate’:转动画效果)默认不传转普通,因为只有ppt,pptx可以转动画,其他类型文件会自动转成普通;文件转动画转失败会直接把类型转为普通
file 本地上传文件 上传的文件不超过50M,格式限制为(ppt, pdf,pptx,doc,docx,wps, xls,xlsx)

响应成功JSON示例:

 {
    "code":200,
    "status":"success",
    "message":"",
    "data": {
        "fileId": "xxxxxxxxx",
        "type": "common",
        "autoId": 1212,
        "status": "waitConvert" 
    }
}

响应异常JSON示例:

未输入appId

{
    "code": 400,
    "status": "error",
    "message": "appId is required.",
    "data": ""
}

appId不正确

{
    "code": 400,
    "status": "error",
    "message": "application not found.",
    "data": ""
}

时间戳错误

{
    "code": 400,
    "status": "error",
    "message": "invalid timestamp.",
    "data": ""
}

签名错误

{
    "code": 403,
    "status": "error",
    "message": "invalid signature.",
    "data": ""
}

字段说明

参数名 说明
status 响应状态
data 成功信息
data.fileId 成功时返回文件ID
data.fileId 成功时返回文件记录自增标识id
data.type 转换类型(‘common’:转普通图片, ‘animate’:转动画效果)只有ppt,pptx会转动画,其中会自动转成普通,转动画转失败也会直接把类型转为普通
data.status 文件转换状态(“normal” :正常,"waitConvert":转换PPT中,"failConvert":转换PPT失败)
code 异常错误代码
message 请求失败时的异常错误信息

php请求示例

<?php

//引用config.php
include 'config.php';


//接口需要的参数(非sign)赋值
$appId = "XXXXXXXX";
$channelId = "127075";
$file = 'C:\Users\polyv\Desktop\timg.jpg';

$params = array(
    'appId'=>$appId,
    'timestamp'=>$timestamp
  );

//生成sign
$sign = getSign($params); //详细查看config.php文件的getSign方法

$data = array(
      'appId' => $appId,
      'timestamp' => $timestamp,
      'sign' => $sign,
      'file' => new CURLFile(realpath($file))
  );

$url = "http://api.polyv.net/live/v3/channel/document/upload-doc";
$ch = curl_init() or die ( curl_error() );
curl_setopt( $ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 360);
$reponse = curl_exec ( $ch );
curl_close ( $ch );
print_r($reponse); 

?>

java请求示例

public class SetCoverImg {

    private static RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(15000)
            .setConnectionRequestTimeout(15000).build();

    public static void main(String[] args) {
        Integer channelId = 108888; // 频道号
        String appId = "XXXXXXXX"; // 应用Id
        String appSecret = "XXXXXXXX";  // 应用密匙
        Long timestamp = System.currentTimeMillis(); // 13位毫秒级时间戳

        // 构建签名
        String sign = DigestUtils.md5Hex(appSecret + "appId" + appId + "channelId" + channelId +  "timestamp" + timestamp + appSecret).toUpperCase();

        String url = String.format("http://api.polyv.net/live/v3/channel/document/upload-doc", channelId);

        Map<String, String> map = new HashMap<>();
        map.put("appId", appId);
        map.put("channelId", String.valueOf(channelId));
        map.put("timestamp", String.valueOf(timestamp));
        map.put("sign", sign);

        // 图片的本地文件路径,推荐128X128
        File file = new File("C:\\Users\\lenovo\\Desktop\\demo.ppt");
        String responBody = sendHttpPost(url, map, file);
        System.out.println(responBody);
    }

    /**
     * 发送 post请求(带文件)
     * @param httpUrl 地址
     * @param maps 参数
     * @param file 上传文件
     */
    private static String sendHttpPost(String httpUrl, Map<String, String> maps, File file) {
        HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
        MultipartEntityBuilder meBuilder = MultipartEntityBuilder.create();
        // 设置此参数后可以保证服务器拿到的文件名不会出现乱码
        meBuilder.setMode(HttpMultipartMode.RFC6532);
        for (String key : maps.keySet()) {
            meBuilder.addPart(key, new StringBody(maps.get(key), ContentType.TEXT_PLAIN));
        }
        FileBody fileBody = new FileBody(file);
        meBuilder.addPart("file", fileBody); // imgfile 图片对应参数名
        HttpEntity reqEntity = meBuilder.build();
        httpPost.setEntity(reqEntity);
        return sendHttpPost(httpPost);
    }

    /**
     * 发送Post请求
     */
    private static String sendHttpPost(HttpPost httpPost) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        HttpEntity entity;
        String responseContent = null;
        try {
            // 创建默认的httpClient实例.
            httpClient = HttpClients.createDefault();
            httpPost.setConfig(requestConfig);
            // 执行请求
            response = httpClient.execute(httpPost);
            entity = response.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭连接,释放资源
                if (response != null) {
                    response.close();
                }
                if (null != httpPost) {
                    httpPost.releaseConnection();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return responseContent;
    }
}

签名规则(config.php文件代码查看)

http://dev.polyv.net/2018/liveproduct/l-api/rule/sign/

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

云课堂(3.8.x)使用手册

1. 环境准备

(1)硬件准备

   电脑硬件推荐配置:
    系统:win7系统以上
    显卡:独立2G显卡或以上
    CPU:i5或以上
    内存:4G或以上
   可选硬件:
    拍摄:外置摄像头,摄像机+采集卡
    收音:小蜜蜂,耳机麦克风,专业麦克风
    外放:耳机,外置扬声器
    现场:绿色、红色、蓝色幕布
    网络:网线,4G网络聚合器

(2)客户端安装

   从官网下载「POLYV云课堂」客户端,根据提示安装到本地,点击开启直播即打开客户端。
   注:安装时若弹出360等安全软件的拦截提示,请选择允许此程序所有操作。

(3)网络环境

   建议使用有线网络。若使用WIFI或手机网络,需确保直播场地内信号稳定。
   直播受上行带宽影响,上行带宽至少2Mbps,建议上行带宽4Mbps或以上。
   带宽测试地址:http://www.speedtest.cn
   测试方法:
    1)打开网页,选择就近的节点,若已是当地节点,则默认即可
    2)点击开始测试
    3)测试结束后查看「上传」带宽,若上传带宽不足4Mbps,请更换更稳定、带宽更大的网络,避免影响正常直播
    4)多次测试得到的平均数据更准确
12

(4)频道准备

   发起直播需要使用频道号,一个频道号相当于一个直播间。频道号在「直播后台」创建,或者由管理员提供。
   创建频道流程可参考:后台使用手册「管理后台 - 频道的创建、分类、删除、修改 - 创建直播间」
3

2. 启动客户端

(1)角色说明

   云课堂支持「讲师」、「嘉宾」两种角色身份登录。

   「讲师」:通过频道号和密码登录。登录后,可添加文档、多媒体,共享屏幕,使用画笔,发起连线,允许连线等操作。同时可以管理聊天室,发起互动应用。

   「嘉宾」:通过嘉宾号和密码登录。登录后,可以翻页讲师加载的文档,添加多媒体,共享屏幕等操作。可以配合讲师管理聊天室,发起互动应用。
4

(2)网页启动登录(仅讲师)

   点击「直播后台- 对应频道 - 直播链接 - 讲师链接」或「频道后台- 直播间管理 - 直播间 - 启动链接」可以进入「启动页面」,如果本地已安装客户端,启动页会自动唤起客户端,也可以手动点击「启动客户端」唤起。如未安装,可以点击「下载客户端」下载并安装客户端。
5
   若本地客户端版本过低,会提示更新,点击「立即更新」,等待安装包下载完成。若网络不稳定会出现更新失败,请更换稳定网络后点击重试。

(3) 本地启动登录

   打开本地客户端,输入「三分屏」场景的频道号、嘉宾号和密码登录。
6

3. 主界面介绍

  打开客户端后可以看到主界面,一共可分为3个大区,「连线互动区」,「预览区」,「互动功能区」。

  「连线互动区」:包含讲师、连线者摄像头画面和相关控制,开关音视频连线,上下课等。

  「预览区」:为白板和文档的显示区域,讲师可以操作白板,文档翻页,画笔,使用屏幕共享、多媒体等。

  「互动功能区」:包含聊天室以及互动应用。
7

4. 设备检测

  直播会可能会用到「摄像头」,「麦克风」,「扬声器」等硬件,请根据需要自行检测。若有需要使用数位板、高拍仪、翻页笔等设备,请按照硬件产品说明书使用,云课堂客户端支持大部分教学硬件设备。

  「摄像头」:启动客户端后,「连线互动区」会自动加载默认摄像头设备,若无画面或者需要更换设备,请点击顶部菜单栏右上角「齿轮」按钮,选择摄像头标签,选择需要显示的设备。

  「麦克风」:点击顶部菜单栏右上角「齿轮」按钮,选择麦克风标签,对着麦克风说话,若波动条有绿色波动,则设备正常。若无波动或波动较小,可以调整麦克风音量条。若出现设备不可用的情况,请更换设备后在设备列表中选择新设备。

  「扬声器」:点击顶部菜单栏右上角「齿轮」按钮,选择扬声器标签。这里影响的是连线以后,观众发言的声音大小。若本地听到声音较小,可以在这里调大一些。建议使用耳机收听,避免外放的声音被麦克风收录,导致循环噪音。
8910

5. 摄像头设置

  客户端会自动加载默认摄像头设备,点击顶部菜单栏右上角「齿轮」按钮,可以修改输出画面的比例和分辨率。以及调整视频连线后的混流布局。混流布局详细介绍见下节。
11

6.混流布局

  混流布局为连线后各「连线者」画面布局情况。包含「单人模式」、「多人模式」、「主讲模式」三种模式。

  「单人模式」:只显示一个视频画面,默认为讲师的画面,可以由讲师设置参与连线的观众、嘉宾为主画面,代替讲师画面。

  「多人模式」:所有连线者的画面都出现在视频区域,各个画面等大平铺。

  「主讲模式」:所有连线者的画面都会出现在视频区,默认讲师画面最大化,其他连线者为小图平铺在讲师画面下端,可以由讲师设置连线者其一为主画面,与讲师画面位置互换。
13

7.使用PPT

  点击「预览区- 文档管理」即可添加使用云文档。
13

(1)操作说明

  点击添加按钮,选择需要加载的文档。建议使用Microsoft Office转出的文档文件。
14
  若为Office转出的PPT文档,选择完成后会提示选择「快速转换」或「动画转换」。

  「快速转换」的转换时间较短,转换后应用不含动画效果。

  「动画转换」的转换时间较长,应用后含原文档动画效果。

  等待转换完成,状态提示「成功」,点击应用即可。

(2)常见问题

  1) 不支持加密文档,加密文档会无法转码。

  2) 目前支持ppt、pptx、pdf格式,文档页数不超过1000页,文档大小不超过200M。

  3) 若文档已上传但未出现在列表中,点击「刷新」重试或「重新上传」。

  4) 若应用后出现样式、字体不对的情况,请先将文档转为PDF后上传。

8.共享屏幕

  云课堂支持「全屏共享」和「区域共享」两种模式。点击「预览区- 共享屏幕 - 对应模式」即可开启。
15
  开启后,客户端会收起为「精简模式」,仅保留「互动功能区」。点击界面上方的「双向箭头」即可恢复完整客户端。注意,恢复完整客户端后,会出现循环嵌套的画面情况,此为正常现象。因此不建议共享屏幕时常开完整客户端。

  将鼠标移动到「屏幕顶部中间」位置,可以唤起「控制条」。支持最小化客户端,退出共享等操作。
16

9. 添加多媒体

  点击「预览区- 多媒体」即可添加需要播放的多媒体视频或音频。
17
  新添加的音视频会覆盖摄像头画面,默认暂停状态,点击即可播放,支持循环播放。播放多媒体时,为了避免客户端重复收录声音,本地无多媒体声音外放,观众端声音正常播放。

  建议单个视频大小不超过2G的视频,因为直播自身会比较占CPU资源,若此时再加载多个较大的视频文件,会造成电脑负载过高。

10. 聊天互动

  打开客户端后,自动加载「互动功能区」,包含「聊天」,「在线」,「提问」,「互动应用」,四个板块。
18
  在「聊天」中,可以和观众聊天互动,支持发送文字、表情、图像,讲师端无字数上限,但无法手动换行。开启禁止聊天后,聊天室关闭,仅讲师、管理员、助教可以发言。针对已发出的消息,讲师可以删除管理员及讲师以外的发言,将鼠标移动到需要删除消息,单击删除按钮即可。

  在「在线」中,可以看到所有在线观众,可以搜索观众,对指定观众禁言或移除频道,移除后恢复需要由管理员操作。

  在「提问」中,可以回答观众的私聊提问,也可以和管理员、助教一对一私聊。

  「互动应用」见下节介绍。

11. 互动应用

  点击「互动功能区- 互动应用」,进入互动应用页,可以使用「公告」、「签到」、「答题卡」、「问卷」、「抽奖」、「分享」6个应用功能。
19

(1)公告

  点开后可输入公告内容,不超过200字的纯文字文本,点击上方「链接」按钮,可以添加链接。点击确认发布即发出公告,发布后可关闭、编辑新公告发布或删除,删除后无法恢复。
212223

(2)签到

  点开后可编辑签到提示语,设置0~1200秒的签到时间,也可以查询历史签到记录。点击开始签到,所有观众都会受到签到提醒,可点击停止签到提前结束。签到结束后会返回签到结果。

24252627

(3)答题卡

  答题卡分为「快速答题卡」和「普通答题卡」。

  「快速答题卡」:无题目和选项内容,需要配合PPT内容或讲师口述使用。

28293031

  「普通答题卡」:要现场输入题目、选项、正确选项,或提前下载模板,按照模板格式设计题目并上传,直播中直接发出。普通答题卡有单选、多选、评分3个选项,操作上一致,在观众端和结果显示上略有不同。

  发出答题卡后,可实时看到答题结果。若为「普通答题卡」,答题结束后可以发送结果给观众。

323334353637

(4)问卷

  问卷和答题卡相似,可以现场拟写和模板上传,上传模板后可再次编辑问卷,最多可设定100道题目。提前在客户端填写的问卷可以在线保存,直播时直接发送。

  问卷有三种题型:单选、多选、问答。单选多选可设置答对得分。发送问卷后,可以看到交卷人数。停止问卷答题后,可以查看回答比例。

  编辑问卷时,可选择此问题为「选填」或「必填」,观众问答题的答案可在直播的后台「账号统计- 互动统计 - 问卷」中查询。

3839404142

(5)抽奖

  点击抽奖按钮,可以编辑奖品名称、参与用户(全体在线或未中奖的在线观众)、中奖人数、是否预设中奖人等。以及可以自定义需要收集的中奖用户信息模板,用于中奖观众填写个人信息,方便工作人员联系验证,姓名电话必选。

  中奖人信息可在直播的后台「账号统计- 互动统计 - 中奖记录」中查询。

434445

(6)分享

  点击分享按钮,会弹出直播链接和二维码,可直接分享。

46

12. 连线功能

  在「已直播」的状态下点击「连线互动区- 视频互动 - 开启学员视频/语音连线」,即可开启连线功能。

  待观众举手后,点击「允许」,即可与观众连线。连线成功后,观众会出现在「连线互动区」中。若需要结束当前观众连线,点击「挂断」,若需要结束连线,点击「结束连线」即可。

  嘉宾登录客户端后默认连线,目前连线人数最高支持7人,含讲师、嘉宾、观众。
4445

13. 本地录制

  直播云端有自动录制,若本地需要录制,可以在客户端中开启。点击顶部菜单栏右上角「齿轮」按钮,选择「基本设置」标签,勾选「开启本地录制」即可。

  录制的视频为整个客户端的界面。若希望实现纯文档和视频头像的录制文件可在页面管理后台中设置「重制课件」。
46

14. 常见问题

(1)信号塔亮黄,甚至断开了怎么办

47
  信号塔亮黄为网络信号不佳,可能影响到直播,请及时更换网络,或联系IT技术人员处理。

(2)直播没有声音

  观众如果使用谷歌内核的浏览器(谷歌,QQ浏览器、360浏览器极速模式),浏览器对陌生网站会采用静音策略,需要观众手动开启。

  如果讲师端没有声音,请点击顶部菜单栏右上角「齿轮」按钮,看讲话时麦克风是否有波动条,若无请查看麦克风是否没占用或禁用,或更换设备尝试。

(3)CPU显示超过了50%怎么办

  直播是比较占用CPU、显卡、网络资源的,请关闭非必要软件后重试。若关闭后无效,请重启电脑,仅打开与直播相关的软件,或更换更好的电脑设备。

(4)共享屏幕黑屏

  共享屏幕或窗口出现黑屏,无法采集画面的情况(多出现在win10系统中),主要是由于显卡交互的原因(双显卡),默认显卡不支持采集。

  解决办法是在电脑上找到“我的电脑”(win10下是此电脑)-右键-管理-设备管理器-显示适配器-禁用第一个默认显卡即可。

(5)软件闪退

  使用软件过程中出现软件闪退并弹出提示框时,需要拿取一下本地日志,日志路径:C:\Users{{用户名}}\AppData\Roaming\polyv-studio\crashes(崩溃日志)、C:\Users{{用户名}}\AppData\Roaming\polyv-studio\logs(业务日志)。将这两个路径下修改日期是对应时间的日志txt文件复制下来提交给技术,并说明闪退时的具体操作即可。

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...