【问题标题】:Load a remote video with guzzle in laravel 5在 laravel 5 中使用 guzzle 加载远程视频
【发布时间】:2017-12-11 16:45:19
【问题描述】:

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

我发现很难播放视频。

blade文件中的视频播放器有如下视频源url

`<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"));
}
}

但是,视频没有播放。我需要尽快解决这个问题,所以我将不胜感激任何帮助来解决这个问题。

谢谢

【问题讨论】:

    标签: php video laravel-5.4 guzzle6


    【解决方案1】:

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

    不过最好看sink option in Guzzle,直接用cURL输出响应,跳过PHP。

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

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2019-06-19
      • 2018-05-11
      相关资源
      最近更新 更多