diff --git a/README.md b/README.md index 77248c1..0eb7d00 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,16 @@ foreach ($audios as $audio) { } ``` +### Get subtitles information from media information container + +```php +$subtitles = $mediaInfoContainer->getSubtitles(); + +foreach ($subtitles as $subtitle) { + // ... do something +} +``` + ### Get images information from media information container ```php diff --git a/src/Container/MediaInfoContainer.php b/src/Container/MediaInfoContainer.php index 4e6ead3..52db1af 100644 --- a/src/Container/MediaInfoContainer.php +++ b/src/Container/MediaInfoContainer.php @@ -6,6 +6,7 @@ use Mhor\MediaInfo\Type\Audio; use Mhor\MediaInfo\Type\General; use Mhor\MediaInfo\Type\Image; +use Mhor\MediaInfo\Type\Subtitle; use Mhor\MediaInfo\Type\Video; class MediaInfoContainer @@ -14,6 +15,7 @@ class MediaInfoContainer const AUDIO_CLASS = 'Mhor\MediaInfo\Type\Audio'; const IMAGE_CLASS = 'Mhor\MediaInfo\Type\Image'; const VIDEO_CLASS = 'Mhor\MediaInfo\Type\Video'; + const SUBTITLE_CLASS = 'Mhor\MediaInfo\Type\Subtitle'; /** * @var string @@ -35,6 +37,11 @@ class MediaInfoContainer */ private $videos = array(); + /** + * @var Subtitle[] + */ + private $subtitles = array(); + /** * @var Image[] */ @@ -88,6 +95,14 @@ public function getVideos() return $this->videos; } + /** + * @return Subtitle[] + */ + public function getSubtitles() + { + return $this->subtitles; + } + /** * @param General $general */ @@ -115,6 +130,9 @@ public function add(AbstractType $trackType) case self::GENERAL_CLASS: $this->setGeneral($trackType); break; + case self::SUBTITLE_CLASS: + $this->addSubtitle($trackType); + break; default: throw new \Exception('Unknow type'); } @@ -143,4 +161,12 @@ private function addImage(Image $image) { $this->images[] = $image; } + + /** + * @param Subtitle $subtitle + */ + private function addSubtitle(Subtitle $subtitle) + { + $this->subtitles[] = $subtitle; + } } diff --git a/src/Factory/TypeFactory.php b/src/Factory/TypeFactory.php index 6b75a89..64c06ed 100644 --- a/src/Factory/TypeFactory.php +++ b/src/Factory/TypeFactory.php @@ -6,6 +6,7 @@ use Mhor\MediaInfo\Type\Audio; use Mhor\MediaInfo\Type\General; use Mhor\MediaInfo\Type\Image; +use Mhor\MediaInfo\Type\Subtitle; use Mhor\MediaInfo\Type\Video; class TypeFactory @@ -14,6 +15,7 @@ class TypeFactory const IMAGE = 'Image'; const GENERAL = 'General'; const VIDEO = 'Video'; + const SUBTITLE = 'Text'; /** * @param $type @@ -31,6 +33,8 @@ public function create($type) return new General(); case self::VIDEO: return new Video(); + case self::SUBTITLE: + return new Subtitle(); default: throw new \Exception('Type doesn\'t exist'); } diff --git a/src/Type/Subtitle.php b/src/Type/Subtitle.php new file mode 100644 index 0000000..79374a6 --- /dev/null +++ b/src/Type/Subtitle.php @@ -0,0 +1,7 @@ +addTrackType('Audio', array()); + $mediaInfoContainerBuilder->addTrackType(TypeFactory::AUDIO, array()); $mediaContainer = $mediaInfoContainerBuilder->build(); $audios = $mediaContainer->getAudios(); $this->assertEquals(0, count($audios[0]->get())); - $mediaInfoContainerBuilder->addTrackType('Video', array()); + $mediaInfoContainerBuilder->addTrackType(TypeFactory::VIDEO, array()); $mediaContainer = $mediaInfoContainerBuilder->build(); $videos = $mediaContainer->getVideos(); $this->assertEquals(0, count($videos[0]->get())); - $mediaInfoContainerBuilder->addTrackType('General', array()); + $mediaInfoContainerBuilder->addTrackType(TypeFactory::GENERAL, array()); $mediaContainer = $mediaInfoContainerBuilder->build(); $this->assertEquals(0, count($mediaContainer->getGeneral()->get())); - $mediaInfoContainerBuilder->addTrackType('Image', array()); + $mediaInfoContainerBuilder->addTrackType(TypeFactory::IMAGE, array()); $mediaContainer = $mediaInfoContainerBuilder->build(); $images = $mediaContainer->getImages(); $this->assertEquals(0, count($images[0]->get())); + + $mediaInfoContainerBuilder->addTrackType(TypeFactory::SUBTITLE, array()); + $mediaContainer = $mediaInfoContainerBuilder->build(); + $subtitles = $mediaContainer->getSubtitles(); + $this->assertEquals(0, count($subtitles[0]->get())); } /** diff --git a/test/Parser/MediaInfoOutputParserTest.php b/test/Parser/MediaInfoOutputParserTest.php index bf35a82..9d68eed 100644 --- a/test/Parser/MediaInfoOutputParserTest.php +++ b/test/Parser/MediaInfoOutputParserTest.php @@ -45,6 +45,7 @@ public function testGetMediaInfoContainer() $this->assertEquals(20974464, $audios[0]->get('samples_count')); $this->assertEquals(null, $audios[0]->get('test')); - $this->assertEquals(34, count($mediaInfoContainer->getGeneral()->get())); + $subtitles = $mediaInfoContainer->getSubtitles(); + $this->assertEquals(16, count($subtitles[0]->get())); } } diff --git a/test/fixtures/mediainfo-output.xml b/test/fixtures/mediainfo-output.xml index 72a1ec3..c637365 100644 --- a/test/fixtures/mediainfo-output.xml +++ b/test/fixtures/mediainfo-output.xml @@ -97,6 +97,34 @@ 18.1 MiB (98%) 0.98404 - + + 195 + 8 + Text + Text + 6 + 7 + 9 + 11 + 11 + 652628868 + UTF-8 + UTF-8 + S_TEXT/UTF8 + UTF-8 Plain Text + S_TEXT/UTF8 + UTF-8 + UTF-8 Plain Text + ja + Japanese + Japanese + ja + jpn + ja + No + No + No + No +