小程序开发定制声网(agora)云端录制(页面录制)实践总结

小程序开发定制近来使用声网的云端录小程序开发定制制功能中的页面录制,小程序开发定制来实现用户视角的课程小程序开发定制回放视频录制。小程序开发定制由于是声网刚新出的功能,文档不是很详细,所以踩了一些坑。在此记录一二。

注:声网页面录制文档地址: 

由于功能是新上的,所以文档不太完善,因此还需要参考:


目前还处于公测期。公测期期间,可以免费使用。

使用前,要确保开通了云端录制功能,且要将声网APPID、录制功能所需的key 、secret记下来。还要注意的是,声网录制开始时间和结束时间,都是由我们自己控制的

(当请求start接口时,就开始录制了,当请求stop接口时,就停止录制了。)

1.接口请求header信息需要增加:Authorization

或者直接在headers 中加入

2.请求acquire

3.请求start

4.请求stop

请求三个接口即可完成录制(以下代码只是简单示例---只提供大致代码,重点注解。)。

  1. /** 简单示例(只提供大致代码,重点注解。并不完全):开始录制
  2. * @param $data
  3. * @return bool
  4. */
  5. public function start($data)
  6. {
  7. //请求声网接口开始录制
  8. $data['prefix'] = empty($data['prefix']) ? 'test' : $data['prefix']; //文件名前缀
  9. $data['hour'] = empty($data['hour']) ? 72 : $data['hour']; //设置云端录制 RESTful API 的调用时效
  10. //录制视频设置
  11. $data['fps'] = empty($data['fps']) ? 15 : $data['fps'];
  12. $data['width'] = empty($data['width']) ? 960 : $data['width'];
  13. $data['height'] = empty($data['height']) ? 720 : $data['height'];
  14. //存储设置
  15. $data['file_path'] = empty($data['file_path']) ? 'agoraRecordVideo' : $data['file_path']; //路径
  16. $baseStartUrl = $this->option['RestUrl'] . $this->option['AppID'] . '/cloud_recording/resourceid/';
  17. $base64Credentials = base64_encode($this->option['Key'] . ':' . $this->option['Secret']);
  18. // 请求头
  19. $header = [
  20. 'Authorization' => 'Basic ' . $base64Credentials,
  21. 'Content-type' => 'application/json;charset=utf-8'
  22. ];
  23. $cname = $data['prefix'] . '-' . 'name';
  24. $uid = (string) 1 //此处uid需要保持唯一性;
  25. $acquireData = [
  26. 'rest_url' => $this->option['RestUrl'],
  27. 'app_id' => $this->option['AppID'],
  28. 'base64_credentials' => $base64Credentials,
  29. 'hour' => $data['hour'],
  30. 'cname' => $cname,
  31. 'uid' => $uid
  32. ];
  33. $acquireRes = self::getAgoraResourceId($acquireData);
  34. if (!$acquireRes['resourceId']) {
  35. Log::error(['message' => '声网返回resourceId错误', 'agora' => $acquireRes], 'startAgoraRecordVideo');
  36. $this->addError('获取声网录resourceId错误,录制失败');
  37. return false;
  38. }
  39. $startUrl = $baseStartUrl . $acquireRes['resourceId'] . '/mode/web/start';
  40. $url = 'www.baidu.com' //你需要录制的页面地址;
  41. $startData = [
  42. 'cname' => $cname,
  43. 'uid' => $uid,
  44. 'clientRequest' => [
  45. 'token' => '',
  46. 'extensionServiceConfig' => [
  47. 'errorHandlePolicy' => 'error_abort',
  48. 'extensionServices' => [
  49. [
  50. 'serviceName' => 'web_recorder_service',
  51. 'errorHandlePolicy' => 'error_abort',
  52. 'serviceParam' => [
  53. 'url' => $url,
  54. 'videoFps' => $data['fps'], //帧率
  55. 'audioProfile' => 1, //48 kHz 采样率,音乐编码,单声道,编码码率约 128 Kbps
  56. 'videoWidth' => $data['width'],
  57. 'videoHeight' => $data['height'],
  58. 'maxRecordingHour' => $data['hour'], //最大录制时长
  59. ]
  60. ]
  61. ]
  62. ],
  63. 'recordingConfig' => [
  64. 'maxIdleTime' => 86400 //不设置的话默认为30s:即推流中断30s,就会停止录制,建议设置此项
  65. ],
  66. 'recordingFileConfig' => [
  67. 'avFileType' => [
  68. 'mp4', 'hls'
  69. ]
  70. ],
  71. 'storageConfig' => [ //此处为第三方存储,可以设置其他存储
  72. 'vendor' => 0, //七牛云
  73. 'region' => 2, //华南
  74. 'bucket' => '', //七牛云bucket
  75. 'accessKey' => '',//七牛云accessKey
  76. 'secretKey' => '',//七牛云secretKey
  77. 'fileNamePrefix' => [
  78. $data['file_path']
  79. ]
  80. ]
  81. ],
  82. ];
  83. $startRes = HttpRequest::post($startUrl, $startData, $header);
  84. //成功,更新状态为开始录制 失败不更新
  85. if ($startRes['sid']) {
  86. $record= [
  87. 'file_path' => $data['file_path'],
  88. 'cname' => $cname,
  89. 'uid' => $uid,
  90. 'sid' => $startRes['sid'],
  91. 'resource_id' => $startRes['resourceId']
  92. ];
  93. /*****************以上数据应记录,以供后用******************/
  94. 记录代码省略....
  95. } else {
  96. Log::error(['message' => '声网返回sid错误', 'agora' => $startRes], 'startAgoraRecordVideo');
  97. $this->addError('声网返回sid错误,录制失败');
  98. return false;
  99. }
  100. return true;
  101. }
  102. /** 简单示例(只提供大致代码,重点注解。并不完全)停止录制
  103. * @param $data
  104. * @return bool
  105. */
  106. public function stop($data)
  107. {
  108. $record //record 为开始录制后记录下的数据
  109. $stopUrl = $this->option['RestUrl'] . $this->option['AppID'] . '/cloud_recording/resourceid/' . $record['resource_id'] . '/sid/' . $record['sid'] . '/mode/web/stop';
  110. $base64Credentials = base64_encode($this->option['Key'] . ':' . $this->option['Secret']);
  111. // 请求头
  112. $header = [
  113. 'Authorization' => 'Basic ' . $base64Credentials,
  114. 'Content-type' => 'application/json;charset=utf-8'
  115. ];
  116. $stopData = [
  117. 'cname' => $record['cname'],
  118. 'uid' => $record['uid'],
  119. 'clientRequest' => (object)null //此处需传空对象
  120. ];
  121. $qiniuUrl = Yii::$app->params['qiniu']['host']; //文件存储地址host
  122. $stopRes = HttpRequest::post($stopUrl, $stopData, $header);
  123. if (!empty($stopRes['serverResponse']['extensionServiceState'])) {
  124. $name = $stopRes['serverResponse']['extensionServiceState'][1]['payload']['fileList'][1]['filename'];
  125. $record = [
  126. 'file_url' => $qiniuUrl . $record['file_path'] . '/' . $name,
  127. ];
  128. /***************得到录制文件地址****************/
  129. } else {
  130. Log::error(['message' => '声网停止录制文件错误', 'agora' => $stopRes], 'stopAgoraRecordVideo');
  131. }
  132. return true;
  133. }
  134. /**
  135. * 声网acquire接口获取resourceId
  136. * @param $data
  137. * @return bool|mixed|string
  138. */
  139. public static function getAgoraResourceId($data)
  140. {
  141. $acquireUrl = $data['rest_url'] . $data['app_id'] . '/cloud_recording/acquire';
  142. // 请求头
  143. $header = [
  144. 'Authorization' => 'Basic ' . $data['base64_credentials'],
  145. 'Content-type' => 'application/json;charset=utf-8'
  146. ];
  147. $acquireData = [
  148. 'cname' => $data['cname'],//区分录制进程
  149. 'uid' => $data['uid'],
  150. 'clientRequest' => [
  151. 'resourceExpiredHour' => $data['hour'],
  152. 'scene' => 1
  153. ]
  154. ];
  155. $acquireRes = HttpRequest::post($acquireUrl, $acquireData, $header);
  156. return $acquireRes;
  157. }

 

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发