我有一个分布在许多服务器上的应用程序,原因是我如何使用文件获取内容从其他服务器中的远程服务器重新播放视频,如果找到重新播放视频的解决方案,则该解决方案使用file_get_content
。如果我尝试使用任何视频URL,则解决方案可以正常运行,但是使用我的symfony aplication文件获取内容返回失败,无法打开流:
HTTP请求失败! HTTP / 1.0 500。
这是我的symfony应用视频回复
public function getMovie($unique_name)
{
//Get cryptage service
$cryptage = $this->get('server.cryptage');
//Get real movie Name.
$movieName = $cryptage->decrypter($unique_name);
//Get movie data
$movie = $this->getDoctrine()
->getRepository('ChannelBundle:Movie')
->findOneBy(['name' => $movieName]);
if (!is_null($movie)) {
//Get Movie transcoded data.
$path = $this->get('kernel')->getRootDir().'/../storage/transcoded_videos/'.$movie->getId().'.'.$movie->getFormat();
$response = new BinaryFileResponse($path);
$response->setAutoEtag(true);
$response->headers->set('Content-Type', mime_content_type($path));
return $response;
}
}
这是我的重播解决方案(silex应用)
$app->get('/streaming/movie/{username}/{password}/{movie_id}.{type}', function($username, $password, $movie_id) use($app) {
$url ="myserver/videoresponse";
// if i try with this url the solution work fine
//$url="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
define('CHUNK_SIZE', 1024*1024);
ini_set('memory_limit','1024M');
set_time_limit(3600);
ob_start();
if( isset($_SERVER['HTTP_RANGE']) )
$opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE'];
$opts['http']['method']= "HEAD";
$conh=stream_context_create($opts);
$opts['http']['method']= "GET";
$cong= stream_context_create($opts);
$out[]= file_get_contents($url,false,$conh);
$out[]= $http_response_header;
ob_end_clean();
array_map("header",$http_response_header);
readfile($url,false,$cong);
});
我尝试执行此操作,但存在相同的问题
ini_set('allow_url_fopen', 1);
也在php.ini
中。