在laravel 5中加载带有guzzle的远程视频

时间:2017-07-07 11:38:40

标签: php video laravel-5.4 guzzle6

我正在尝试使用guzzle来加载并播放在子域(subdomain.domain.com)中上传到主域(domain.com)中的位置的远程视频。

我发现很难播放视频。

刀片文件中的视频播放器具有以下视频源网址

`<source src="{{url('video/'.$token.'/'.$videoname)}}" type="{{$video_mime_type}}">

...`

源的路由通向带有以下代码的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Storage;
use Response;
use File;
use GuzzleHttp\Mimetypes;
use GuzzleHttp\Client;
use GuzzleHttp\Stream\Stream;
use GuzzleHttp\Stream\Utils;

class ResourceController extends Controller
{


public function show_video_api($videoname)
{       
    $client = new Client(['base_uri' => 'http://subdomain.domain.com/api/']);

    $resp = $client->request('GET',"video/".$videoname,['stream'=>true]);

    $body=$resp->getBody();
    echo $body;

   }

}

子域api方法如下:

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;

class ServiceController extends Controller
{

public function video($videoname)
{

    return response()->file(storage_path("app/lesson-files/$videoname"));
}
}

然而,视频没有播放。我需要尽可能快地解决这个问题,所以我将非常感谢你帮助解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为在Laravel中你必须返回一个Response,而不仅仅是打印到标准输出(不确定它是否被缓冲)。请创建Response对象,而不仅仅是echo内容。

但最好是查看sink option in Guzzle并使用它直接在cURL中输出响应,跳过PHP。

但是......您可能不希望以任何方式在PHP中执行此操作,因为这是一种非常慢的视频服务方式。看看nginx,它对于这样的用例非常灵活和快速。