Handle.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace Live\Lib;
  3. use Dever;
  4. class Handle
  5. {
  6. public function method($config)
  7. {
  8. if ($config['type'] == 1) {
  9. $method = new Qiniu($config);
  10. }
  11. return $method;
  12. }
  13. # 启动
  14. public function start($id)
  15. {
  16. $info = Dever::db('live/stream')->one($id);
  17. $config = Dever::db('live/info')->one($info['live_id']);
  18. $method = $this->method($config);
  19. $stream = $method->start($info['key']);
  20. }
  21. # 禁播
  22. public function stop($id)
  23. {
  24. $info = Dever::db('live/stream')->one($id);
  25. $config = Dever::db('live/info')->one($info['live_id']);
  26. $method = $this->method($config);
  27. $stream = $method->stop($info['key']);
  28. }
  29. # 保存
  30. public function save($id, $log_id)
  31. {
  32. $info = Dever::db('live/stream')->one($id);
  33. $config = Dever::db('live/info')->one($info['live_id']);
  34. $method = $this->method($config);
  35. $info_update['where_id'] = $info['id'];
  36. $info_update['status'] = 3;
  37. Dever::db('live/stream')->update($info_update);
  38. Dever::db('live/stream_log')->update(array('edate' => time(), 'where_id' => $log_id));
  39. return true;
  40. }
  41. # 建立直播日志
  42. public function saveLog($id, $log_id = false)
  43. {
  44. $info = Dever::db('live/stream')->one($id);
  45. if (!$log_id) {
  46. $time = time();
  47. $data['sdate'] = $time;
  48. $data['stream_id'] = $id;
  49. $data['live_id'] = $info['live_id'];
  50. $data['active_id'] = $info['active_id'];
  51. $id = Dever::db('live/stream_log')->insert($data);
  52. } else {
  53. $config = Dever::db('live/info')->one($info['live_id']);
  54. $log = Dever::db('live/stream_log')->one($log_id);
  55. $method = $this->method($config);
  56. $log['sdate'] = intval($log['sdate']);
  57. $log['edate'] = intval($log['edate']);
  58. $data['url_m3u8'] = $config['host'] . $method->save($info['key'],$log['sdate'], $log['edate']);
  59. $data['url_mp4'] = $config['host'] . $method->save($info['key'], $log['sdate'], $log['edate'], 'mp4');
  60. $data['where_id'] = $log_id;
  61. Dever::db('live/stream_log')->update($data);
  62. $id = $log_id;
  63. }
  64. return $id;
  65. }
  66. # 开始直播
  67. public function startLive($id)
  68. {
  69. $info = Dever::db('live/stream')->one($id);
  70. $config = Dever::db('live/info')->one($info['live_id']);
  71. $method = $this->method($config);
  72. $data['where_id'] = $info['id'];
  73. $data['status'] = 2;
  74. Dever::db('live/stream')->update($data);
  75. }
  76. # 初始化流
  77. public function init($id, $name = '')
  78. {
  79. $info = Dever::db('live/stream')->one($id);
  80. if ($info['url_rtmp']) {
  81. return;
  82. }
  83. if ($name) {
  84. $info['key'] = $name;
  85. }
  86. return $this->get($info, true);
  87. }
  88. # 获取流信息 定时跑
  89. public function get($info, $create = false)
  90. {
  91. if (!is_array($info)) {
  92. $info = Dever::db('live/stream')->one($info);
  93. }
  94. $config = Dever::db('live/info')->one($info['live_id']);
  95. $method = $this->method($config);
  96. if ($create) {
  97. $stream = $method->create($info['key']);
  98. } else {
  99. $stream = $method->getInfo($info['key']);
  100. }
  101. $rtmp = $method->getRtmp($info['key'], $info['times'] * 3600);
  102. $url = $method->getPlay($info['key']);
  103. $status = array();
  104. $history = array();
  105. try {
  106. $status = $method->getLiveStatus($info['key']);
  107. } catch (\Exception $e) {
  108. $status = array();
  109. }
  110. try {
  111. $history = $method->history($info['key']);
  112. } catch (\Exception $e) {
  113. $history = array();
  114. }
  115. $data['where_id'] = $info['id'];
  116. $data['live'] = $rtmp;
  117. $data['url_rtmp'] = $url['rtmp'];
  118. $data['url_hls'] = $url['hls'];
  119. $data['url_hdl'] = $url['hdl'];
  120. $data['url_pic'] = $url['pic'];
  121. $live = Dever::json_decode($info['info']);
  122. $live['info'] = $stream;
  123. $live['live'] = $status;
  124. $live['hitory'] = $history;
  125. if ($status) {
  126. $data['status'] = 2;
  127. } else {
  128. $data['status'] = 1;
  129. }
  130. $data['info'] = Dever::json_encode($live);
  131. Dever::db('live/stream')->update($data);
  132. return $data;
  133. }
  134. }