Stream.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace Qiniu\Pili;
  3. use \Qiniu\Pili\Utils;
  4. use \Qiniu\Pili\HttpRequest;
  5. class Stream
  6. {
  7. private $_transport;
  8. private $_hub;
  9. private $_key;
  10. private $_baseURL;
  11. public function __construct($transport, $hub, $key)
  12. {
  13. $this->_transport = $transport;
  14. $this->_hub = $hub;
  15. $this->_key = $key;
  16. $cfg = Config::getInstance();
  17. $protocal = $cfg->USE_HTTPS === true ? "https" : "http";
  18. $this->_baseURL = sprintf("%s://%s/%s/hubs/%s/streams/%s", $protocal, $cfg->API_HOST, $cfg->API_VERSION, $this->_hub, Utils::base64UrlEncode($this->_key));
  19. }
  20. //获得流信息.
  21. /*
  22. * RETURN
  23. * @hub: Hub名.
  24. * @key: 流名.
  25. * @disableTill: 禁用结束的时间, 0 表示不禁用, -1 表示永久禁用.
  26. * @converts: 实时转码规格.
  27. */
  28. public function info()
  29. {
  30. $resp=$this->_transport->send(HttpRequest::GET, $this->_baseURL);
  31. $ret = array();
  32. $ret["hub"] = $this->_hub;
  33. $ret["key"] = $this->_key;
  34. $ret["disabledTill"] = $resp["disabledTill"];
  35. $ret["converts"] = $resp["converts"];
  36. return $ret;
  37. }
  38. //在一定期限内禁止一个流.
  39. /*
  40. * PARAM
  41. * @till: Unix 时间戳, 在这之前流均不可用.
  42. */
  43. public function disable($till = null)
  44. {
  45. $url = $this->_baseURL . "/disabled";
  46. if (empty($till)) {
  47. $params['disabledTill'] = -1;
  48. } else {
  49. $params['disabledTill'] = $till;
  50. }
  51. $body = json_encode($params);
  52. return $this->_transport->send(HttpRequest::POST, $url, $body);
  53. }
  54. //启用一个流.
  55. public function enable()
  56. {
  57. $url = $this->_baseURL . "/disabled";
  58. $params['disabledTill'] = 0;
  59. $body = json_encode($params);
  60. return $this->_transport->send(HttpRequest::POST, $url, $body);
  61. }
  62. //查询直播状态.
  63. /*
  64. * RETURN
  65. * @startAt: 直播开始的 Unix 时间戳, 0 表示当前没在直播.
  66. * @clientIP: 直播的客户端 IP.
  67. * @bps: 直播的码率.
  68. * @fps: 直播的帧率.
  69. */
  70. public function liveStatus()
  71. {
  72. $url = $this->_baseURL . "/live";
  73. return $this->_transport->send(HttpRequest::GET, $url);
  74. }
  75. //查询直播历史.
  76. /*
  77. * PARAM
  78. * @start: Unix 时间戳, 限定了查询的时间范围, 0 值表示不限定, 系统会返回所有时间的直播历史.
  79. * @end: Unix 时间戳, 限定了查询的时间范围, 0 值表示不限定, 系统会返回所有时间的直播历史.
  80. * RETURN
  81. * @items: 数组. 每个item包含一次推流的开始及结束时间.
  82. * @start: Unix 时间戳, 直播开始时间.
  83. * @end: Unix 时间戳, 直播结束时间.
  84. */
  85. public function historyActivity($start = null, $end = null)
  86. {
  87. $url = $this->_baseURL . "/historyrecord";
  88. $flag = "?";
  89. if (!empty($start)) {
  90. $url = $url . $flag . "start=" . $start;
  91. $flag = "&";
  92. }
  93. if (!empty($end)) {
  94. $url = $url . $flag . "end=" . $end;
  95. }
  96. return $this->_transport->send(HttpRequest::GET, $url);
  97. }
  98. //保存直播回放.
  99. /*
  100. * PARAM
  101. * @start: Unix 时间戳, 起始时间, 0 值表示不指定, 则不限制起始时间.
  102. * @end: Unix 时间戳, 结束时间, 0 值表示当前时间.
  103. * RETURN
  104. * @fname: 保存到bucket里的文件名, 由系统生成.
  105. */
  106. public function save($start = null, $end = null)
  107. {
  108. $url = $this->_baseURL . "/saveas";
  109. if (!empty($start)) {
  110. $params['start'] = $start;
  111. }
  112. if (!empty($end)) {
  113. $params['end'] = $end;
  114. }
  115. $body = json_encode($params);
  116. return $this->_transport->send(HttpRequest::POST, $url, $body);
  117. }
  118. //灵活度更高的保存直播回放.
  119. /*
  120. * PARAM
  121. * @fname: 保存的文件名, 不指定会随机生成.
  122. * @start: Unix 时间戳, 起始时间, 0 值表示不指定, 则不限制起始时间.
  123. * @end: Unix 时间戳, 结束时间, 0 值表示当前时间.
  124. * @format: 保存的文件格式, 默认为m3u8.
  125. * @pipeline: dora 的私有队列, 不指定则用默认队列.
  126. * @notify: 保存成功后的回调地址.
  127. * @expireDays: 对应ts文件的过期时间.
  128. * -1 表示不修改ts文件的expire属性.
  129. * 0 表示修改ts文件生命周期为永久保存.
  130. * >0 表示修改ts文件的的生命周期为ExpireDays.
  131. * RETURN
  132. * @fname: 保存到bucket里的文件名.
  133. * @persistentID: 异步模式时,持久化异步处理任务ID,通常用不到该字段.
  134. */
  135. public function saveas($options = null)
  136. {
  137. $url = $this->_baseURL . "/saveas";
  138. if (!empty($options)) {
  139. $body = json_encode($options);
  140. } else {
  141. $body = null;
  142. }
  143. return $this->_transport->send(HttpRequest::POST, $url, $body);
  144. }
  145. //对流进行截图并保存.
  146. /*
  147. * PARAM
  148. * @fname: 保存的文件名, 不指定会随机生成.
  149. * @time: Unix 时间戳, 保存的时间点, 默认为当前时间.
  150. * @format: 保存的文件格式, 默认为jpg.
  151. * RETURN
  152. * @fname: 保存到bucket里的文件名.
  153. */
  154. public function snapshot($options = null)
  155. {
  156. $url = $this->_baseURL . "/snapshot";
  157. if (!empty($options)) {
  158. $body = json_encode($options);
  159. } else {
  160. $body = null;
  161. }
  162. return $this->_transport->send(HttpRequest::POST, $url, $body);
  163. }
  164. //更改流的实时转码规格
  165. /*
  166. * PARAM
  167. * @profiles: 实时转码规格. array("480p", "720p")
  168. */
  169. public function updateConverts($profiles)
  170. {
  171. $url = $this->_baseURL . "/converts";
  172. $params['converts'] = $profiles;
  173. $body = json_encode($params);
  174. return $this->_transport->send(HttpRequest::POST, $url, $body);
  175. }
  176. }