Specify temporary directory + fix for default ffmpeg-passes* temporary directory (#855)
This commit is contained in:
parent
368def99a2
commit
bda300b69a
9 changed files with 119 additions and 35 deletions
|
|
@ -2,6 +2,11 @@
|
|||
|
||||
All Notable changes to the library will be documented in this file
|
||||
|
||||
## 1.0.1 - 2022-02-22
|
||||
|
||||
- Added configuration key to customize the temporary directory used for passes.
|
||||
- Fix for the path of the default `ffmpeg-passes*` temporary directory.
|
||||
|
||||
## 1.0.0 - 2022-02-09
|
||||
|
||||
Upgraded dependencies, integrated the Alchemy Binary library, and dropped support for anything below PHP 8.0
|
||||
|
|
|
|||
|
|
@ -79,6 +79,14 @@ $ffmpeg = FFMpeg\FFMpeg::create(array(
|
|||
), $logger);
|
||||
```
|
||||
|
||||
You may pass a `temporary_directory` key to specify a path for temporary files.
|
||||
|
||||
```php
|
||||
$ffmpeg = FFMpeg\FFMpeg::create(array(
|
||||
'temporary_directory' => '/var/ffmpeg-tmp'
|
||||
), $logger);
|
||||
```
|
||||
|
||||
### Manipulate media
|
||||
|
||||
`FFMpeg\FFMpeg` creates media based on URIs. URIs could be either a pointer to a
|
||||
|
|
|
|||
|
|
@ -57,7 +57,8 @@
|
|||
"php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5.10"
|
||||
"phpunit/phpunit": "^9.5.10",
|
||||
"mockery/mockery": "^1.5"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ namespace FFMpeg\Media;
|
|||
use FFMpeg\Driver\FFMpegDriver;
|
||||
use FFMpeg\FFProbe;
|
||||
use FFMpeg\Filters\FiltersCollection;
|
||||
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
||||
|
||||
abstract class AbstractMediaType implements MediaTypeInterface
|
||||
{
|
||||
|
|
@ -96,6 +97,18 @@ abstract class AbstractMediaType implements MediaTypeInterface
|
|||
return $this->filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new instance of TemporaryDirectory with the optionally configured directory.
|
||||
*
|
||||
* @return \Spatie\TemporaryDirectory\TemporaryDirectory
|
||||
*/
|
||||
public function getTemporaryDirectory(): TemporaryDirectory
|
||||
{
|
||||
return new TemporaryDirectory(
|
||||
$this->driver->getConfiguration()->get('temporary_directory') ?: ''
|
||||
);
|
||||
}
|
||||
|
||||
protected function cleanupTemporaryFile($filename)
|
||||
{
|
||||
if (file_exists($filename) && is_writable($filename)) {
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@ abstract class AbstractVideo extends Audio
|
|||
}
|
||||
|
||||
$this->fsId = uniqid('ffmpeg-passes');
|
||||
$this->fs = (new TemporaryDirectory($this->fsId))->create();
|
||||
$this->fs = $this->getTemporaryDirectory()->name($this->fsId)->create();
|
||||
$passPrefix = $this->fs->path(uniqid('pass-'));
|
||||
touch($passPrefix);
|
||||
$passes = [];
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class Concat extends AbstractMediaType
|
|||
*/
|
||||
|
||||
// Create the file which will contain the list of videos
|
||||
$fs = (new TemporaryDirectory())->create();
|
||||
$fs = $this->getTemporaryDirectory()->create();
|
||||
$sourcesFile = $fs->path('ffmpeg.concat');
|
||||
|
||||
// Set the content of this file
|
||||
|
|
|
|||
|
|
@ -32,4 +32,42 @@ class AdvancedMediaTest extends AbstractMediaTestCase
|
|||
$advancedMedia = new AdvancedMedia([__FILE__, __FILE__], $driver, $ffprobe);
|
||||
$this->assertInstanceOf('FFMpeg\Filters\AdvancedMedia\ComplexFilters', $advancedMedia->filters());
|
||||
}
|
||||
|
||||
public function testGetTemporaryDirectoryWithoutCustomConfiguration()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
$configuration = $this->getConfigurationMock();
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$configuration->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('temporary_directory'))
|
||||
->will($this->returnValue(null));
|
||||
|
||||
$advancedMedia = new AdvancedMedia([__FILE__, __FILE__], $driver, $ffprobe);
|
||||
$this->assertEquals('', $advancedMedia->getTemporaryDirectory()->path());
|
||||
}
|
||||
|
||||
public function testGetTemporaryDirectoryWithCustomConfiguration()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
$configuration = $this->getConfigurationMock();
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$configuration->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('temporary_directory'))
|
||||
->will($this->returnValue('/var/ffmpeg'));
|
||||
|
||||
$advancedMedia = new AdvancedMedia([__FILE__, __FILE__], $driver, $ffprobe);
|
||||
$this->assertEquals('/var/ffmpeg', $advancedMedia->getTemporaryDirectory()->path());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace Tests\FFMpeg\Unit\Media;
|
||||
|
||||
use FFMpeg\Media\Concat;
|
||||
use Mockery;
|
||||
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
||||
|
||||
class ConcatTest extends AbstractMediaTestCase
|
||||
|
|
@ -57,6 +58,17 @@ class ConcatTest extends AbstractMediaTestCase
|
|||
|
||||
array_push($commands, $pathfile);
|
||||
|
||||
$configuration = Mockery::mock('Alchemy\BinaryDriver\ConfigurationInterface');
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$configuration->shouldReceive('get')
|
||||
->once()
|
||||
->with('temporary_directory')
|
||||
->andReturnNull();
|
||||
|
||||
$driver->expects($this->exactly(1))
|
||||
->method('command')
|
||||
->with($this->isType('array'), false, $this->anything())
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace Tests\FFMpeg\Unit\Media;
|
|||
use FFMpeg\Exception\RuntimeException;
|
||||
use FFMpeg\Format\Video\X264;
|
||||
use FFMpeg\Media\Video;
|
||||
use Mockery;
|
||||
|
||||
class VideoTest extends AbstractStreamableTestCase
|
||||
{
|
||||
|
|
@ -158,25 +159,27 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
|
||||
$configuration = $this->getMockBuilder('Alchemy\BinaryDriver\ConfigurationInterface')->getMock();
|
||||
$configuration = Mockery::mock('Alchemy\BinaryDriver\ConfigurationInterface');
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$configuration->expects($this->once())
|
||||
->method('has')
|
||||
->with($this->equalTo('ffmpeg.threads'))
|
||||
->will($this->returnValue($threads));
|
||||
$configuration->shouldReceive('has')
|
||||
->once()
|
||||
->with('ffmpeg.threads')
|
||||
->andReturn($threads);
|
||||
|
||||
$configuration->shouldReceive('get')
|
||||
->once()
|
||||
->with('temporary_directory')
|
||||
->andReturnNull();
|
||||
|
||||
if ($threads) {
|
||||
$configuration->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('ffmpeg.threads'))
|
||||
->will($this->returnValue(24));
|
||||
} else {
|
||||
$configuration->expects($this->never())
|
||||
->method('get');
|
||||
$configuration->shouldReceive('get')
|
||||
->once()
|
||||
->with('ffmpeg.threads')
|
||||
->andReturn(24);
|
||||
}
|
||||
|
||||
$capturedCommands = [];
|
||||
|
|
@ -585,21 +588,25 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
|
||||
$configuration = $this->getMockBuilder('Alchemy\BinaryDriver\ConfigurationInterface')->getMock();
|
||||
$configuration = Mockery::mock('Alchemy\BinaryDriver\ConfigurationInterface');
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$configuration->expects($this->any())
|
||||
->method('has')
|
||||
->with($this->equalTo('ffmpeg.threads'))
|
||||
->will($this->returnValue(true));
|
||||
$configuration->shouldReceive('has')
|
||||
->with('ffmpeg.threads')
|
||||
->andReturn(true);
|
||||
|
||||
$configuration->expects($this->any())
|
||||
->method('get')
|
||||
->with($this->equalTo('ffmpeg.threads'))
|
||||
->will($this->returnValue(24));
|
||||
$configuration->shouldReceive('get')
|
||||
->once()
|
||||
->with('ffmpeg.threads')
|
||||
->andReturn(24);
|
||||
|
||||
$configuration->shouldReceive('get')
|
||||
->once()
|
||||
->with('temporary_directory')
|
||||
->andReturnNull();
|
||||
|
||||
$capturedCommands = [];
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue