Fix #46 : A/V synchronization works on flash player, not on html5 one
This commit is contained in:
		
					parent
					
						
							
								8bd6700377
							
						
					
				
			
			
				commit
				
					
						543d9aaeaf
					
				
			
		
					 3 changed files with 7 additions and 69 deletions
				
			
		|  | @ -1,6 +1,10 @@ | ||||||
| CHANGELOG | CHANGELOG | ||||||
| --------- | --------- | ||||||
| 
 | 
 | ||||||
|  | * 0.3.2 (xx-08-2013) | ||||||
|  | 
 | ||||||
|  |   * Fix A/V synchronization over flash and HTML5 players. | ||||||
|  | 
 | ||||||
| * 0.3.1 (06-08-2013) | * 0.3.1 (06-08-2013) | ||||||
| 
 | 
 | ||||||
|   * Allow use of FFProbe on remote URIs. |   * Allow use of FFProbe on remote URIs. | ||||||
|  |  | ||||||
|  | @ -39,32 +39,6 @@ class SynchronizeFilter implements VideoFilterInterface | ||||||
|      */ |      */ | ||||||
|     public function apply(Video $video, VideoInterface $format) |     public function apply(Video $video, VideoInterface $format) | ||||||
|     { |     { | ||||||
|         $streams = $video->getStreams(); |         return array('-async', '1'); | ||||||
| 
 |  | ||||||
|         if (null === $videoStream = $streams->videos()->first()) { |  | ||||||
|             return array(); |  | ||||||
|         } |  | ||||||
|         if (!$videoStream->has('start_time')) { |  | ||||||
|             return array(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         $params = array( |  | ||||||
|             '-itsoffset', |  | ||||||
|             $videoStream->get('start_time'), |  | ||||||
|             '-i', |  | ||||||
|             $video->getPathfile(), |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         foreach ($streams as $stream) { |  | ||||||
|             if ($videoStream === $stream) { |  | ||||||
|                 $params[] = '-map'; |  | ||||||
|                 $params[] = '1:' . $stream->get('index'); |  | ||||||
|             } else { |  | ||||||
|                 $params[] = '-map'; |  | ||||||
|                 $params[] = '0:' . $stream->get('index'); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return $params; |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,56 +3,16 @@ | ||||||
| namespace FFMpeg\Tests\Filters\Video; | namespace FFMpeg\Tests\Filters\Video; | ||||||
| 
 | 
 | ||||||
| use FFMpeg\Tests\TestCase; | use FFMpeg\Tests\TestCase; | ||||||
| use FFMpeg\FFProbe\DataMapping\StreamCollection; |  | ||||||
| use FFMpeg\FFProbe\DataMapping\Stream; |  | ||||||
| use FFMpeg\Filters\Video\SynchronizeFilter; | use FFMpeg\Filters\Video\SynchronizeFilter; | ||||||
| 
 | 
 | ||||||
| class SynchronizeFilterTest extends TestCase | class SynchronizeFilterTest extends TestCase | ||||||
| { | { | ||||||
|     /** |     public function testApply() | ||||||
|      * @dataProvider provideStreams |  | ||||||
|      */ |  | ||||||
|     public function testApply($streams, $expected) |  | ||||||
|     { |     { | ||||||
|         $video = $this->getVideoMock(); |         $video = $this->getVideoMock(); | ||||||
|         $format = $this->getMock('FFMpeg\Format\VideoInterface'); |         $format = $this->getMock('FFMpeg\Format\VideoInterface'); | ||||||
|         $video->expects($this->once()) |  | ||||||
|             ->method('getStreams') |  | ||||||
|             ->will($this->returnValue($streams)); |  | ||||||
|         $video->expects($this->any()) |  | ||||||
|             ->method('getPathfile') |  | ||||||
|             ->will($this->returnValue(__FILE__)); |  | ||||||
| 
 | 
 | ||||||
|         $filter = new SynchronizeFilter(); |         $filter = new SynchronizeFilter(); | ||||||
|         $this->assertEquals($expected, $filter->apply($video, $format)); |         $this->assertEquals(array('-async', '1'), $filter->apply($video, $format)); | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function provideStreams() |  | ||||||
|     { |  | ||||||
|         $audio = new StreamCollection(array(new Stream(array( |  | ||||||
|             'index' => 0, |  | ||||||
|             'codec_type' => 'audio', |  | ||||||
|         )))); |  | ||||||
|         $synced = new StreamCollection(array(new Stream(array( |  | ||||||
|             'index' => 0, |  | ||||||
|             'codec_type' => 'video', |  | ||||||
|         )), new Stream(array( |  | ||||||
|             'index' => 1, |  | ||||||
|             'codec_type' => 'audio', |  | ||||||
|         )))); |  | ||||||
|         $video = new StreamCollection(array(new Stream(array( |  | ||||||
|             'index' => 0, |  | ||||||
|             'codec_type' => 'video', |  | ||||||
|             'start_time' => '0.123456', |  | ||||||
|         )), new Stream(array( |  | ||||||
|             'index' => 1, |  | ||||||
|             'codec_type' => 'audio', |  | ||||||
|         )))); |  | ||||||
| 
 |  | ||||||
|         return array( |  | ||||||
|             array($audio, array()), |  | ||||||
|             array($synced, array()), |  | ||||||
|             array($video, array('-itsoffset', '0.123456', '-i', __FILE__, '-map', '1:0', '-map', '0:1')), |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue