| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace Modules\Manage\Controllers;
- use App\Repositories\AdRepository;
- use App\Repositories\OriginalRepository;
- use App\Repositories\ShopsRepository;
- use App\Repositories\Utils\M3u8CacheRepository;
- use App\Repositories\VideoRepository;
- use Hyperf\HttpServer\Request;
- class M3u8Controller extends BaseController
- {
- /**
- * 获取raw
- * @param Request $request
- * @param VideoRepository $videoRepository
- * @return \Psr\Http\Message\ResponseInterface
- */
- public function raw(Request $request, VideoRepository $videoRepository, AdRepository $adRepository, OriginalRepository $goodsRepository, ShopsRepository $shopsRepository)
- {
- $innerToken = 'vj2x2fgvc'; // 不走中间件,定义个内部简单通信token
- $token = $request->input('tk', '');
- if ($token != $innerToken) {
- return self::responseM3u8Raw('');
- }
- $module = trim(strtolower($request->input('module', '')));
- $pk = substr($request->input('pk', ''), 0, 16);
- $rateType = substr($request->input('rate_type', ''), 0, 32); // 指定的比特率.
- $item = null;
- $m3u8PlayUrl = '';
- switch ($module) {
- case 'video':
- $item = $videoRepository->findBy('id', $pk, ['id', 'mu']);
- if (!empty($item->mu)) {
- $m3u8PlayUrl = $item->mu;
- }
- break;
- case 'ad':
- $item = $adRepository->findBy('id', $pk, ['id', 'play']);
- if (!empty($item->play)) {
- $m3u8PlayUrl = $item->play;
- }
- break;
- case 'shop':
- $item = $shopsRepository->findBy('uid', $pk, ['video_address']);
- if (!empty($item->video_address)) {
- $m3u8PlayUrl = $item->video_address;
- }
- break;
- case 'goods':
- $item = $goodsRepository->findBy('uid', $pk, ['video_address']);
- if (!empty($item->video_address)) {
- $m3u8PlayUrl = $item->video_address;
- }
- break;
- }
- if (empty($m3u8PlayUrl)) {
- return self::responseM3u8Raw('');
- }
- $raw = M3u8CacheRepository::getMu38Raw($m3u8PlayUrl, false);
- return self::responseM3u8Raw($raw);
- }
- /**
- * @return string[]
- */
- private function getHeaders()
- {
- return [
- 'Content-Type' => 'application/x-mpegURL',
- ];
- }
- /**
- * 返回raw
- * @param $raw
- * @return \Psr\Http\Message\ResponseInterface
- */
- private function responseM3u8Raw($raw)
- {
- return response($raw, 200, self::getHeaders());
- }
- }
|