Allow use of FFProbe on remote files

This commit is contained in:
Romain Neutron 2013-08-05 14:36:27 +02:00
commit 69767d3d34
3 changed files with 35 additions and 19 deletions

View file

@ -12,6 +12,7 @@
namespace FFMpeg;
use Alchemy\BinaryDriver\ConfigurationInterface;
use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Cache\Cache;
use FFMpeg\Driver\FFProbeDriver;
@ -207,12 +208,6 @@ class FFProbe
private function probe($pathfile, $command, $type, $allowJson = true)
{
if (!is_file($pathfile)) {
throw new InvalidArgumentException(sprintf(
'Invalid filepath %s, unable to read.', $pathfile
));
}
$id = sprintf('%s-%s', $command, $pathfile);
if ($this->cache->contains($id)) {
@ -237,7 +232,11 @@ class FFProbe
$parseIsToDo = true;
}
$output = $this->ffprobe->command($commands);
try {
$output = $this->ffprobe->command($commands);
} catch (ExecutionFailureException $e) {
throw new RuntimeException(sprintf('Unable to probe %s', $pathfile), $e->getCode(), $e);
}
if ($parseIsToDo) {
$data = $this->parser->parse($type, $output);

View file

@ -0,0 +1,29 @@
<?php
namespace FFMpeg\Functional;
use FFMpeg\FFProbe;
class FFProbeTest extends FunctionalTestCase
{
public function testProbeOnFile()
{
$ffprobe = FFProbe::create();
$this->assertGreaterThan(0, count($ffprobe->streams(__DIR__ . '/../../files/Audio.mp3')));
}
/**
* @expectedException FFMpeg\Exception\RuntimeException
*/
public function testProbeOnUnexistantFile()
{
$ffprobe = FFProbe::create();
$ffprobe->streams('/path/to/no/file');
}
public function testProbeOnRemoteFile()
{
$ffprobe = FFProbe::create();
$this->assertGreaterThan(0, count($ffprobe->streams('http://video-js.zencoder.com/oceans-clip.mp4')));
}
}

View file

@ -228,18 +228,6 @@ class FFProbeTest extends TestCase
$this->assertEquals($output, call_user_func(array($ffprobe, $method), $pathfile));
}
/**
* @expectedException FFMpeg\Exception\InvalidArgumentException
* @dataProvider provideProbeMethod
*/
public function testProbeWithInvalidFile($method)
{
$pathfile = '/path/to/nofile';
$ffprobe = new FFProbe($this->getFFProbeDriverMock(), $this->getCacheMock());
call_user_func(array($ffprobe, $method), $pathfile);
}
public function provideProbeMethod()
{
return array(