public function ValidateFlavor() { return parent::Initialize(); }
public function GenerateIntermediateSource(KDLMediaDataSet $mediaSet, KDLProfile $profile = null) { /* * Check minimal source validity, else get out */ if ($mediaSet == null || !$mediaSet->IsDataSet()) { return null; } /* * Source is invalid if Initialize() fails, unless it is an ARF */ if (!(isset($mediaSet->_container) && $mediaSet->_container->_format == "arf" || $mediaSet->Initialize())) { return null; } $interSrcProfile = null; $forceAudioStream = false; /* * For ARF ==> webex plugin */ if (isset($mediaSet->_container) && $mediaSet->_container->IsFormatOf(array("arf"))) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::COPY, KDLVideoTarget::WVC1A, 4000, 1080, KDLAudioTarget::WMA, 128, 0, 1, "webexNbrplayer.WebexNbrplayer"); /* * Following creates 3 retries for Webex conversions. * Required for the sake of 'garbled audio' issue. */ $interSrcFlavor = $interSrcProfile->_flavors[0]; $interSrcFlavor->_transcoders[] = $interSrcFlavor->_transcoders[0]; $interSrcFlavor->_transcoders[] = $interSrcFlavor->_transcoders[0]; } else { if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("gotomeeting", "g2m3", "gotomeeting3"))) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::WMV, KDLVideoTarget::WVC1A, 4000, 1080, KDLAudioTarget::WMA, 128, 0, 1, "expressionEncoder.ExpressionEncoder"); } else { if (isset($mediaSet->_video) && ($mediaSet->_container->IsFormatOf(array("qt", "mov")) && $mediaSet->_video->IsFormatOf(array("wmv", "wmv2", "wmv3", "wvc1", "vc1", "vc-1")) && $mediaSet->_audio->IsFormatOf(array("wma", "wma2", "wma3", "windows media audio", "windows media audio 10 professional")))) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 1, "quickTimeTools.QuickTimeTools"); } else { if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("xdvd", "xdva", "xdvb", "xdvc", "xdve", "xdvf", "xdv4", "hdv2"))) { foreach ($profile->_flavors as $flvr) { foreach ($flvr->_transcoders as $trans) { if ($trans->_id == KDLTranscoders::ON2) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::FFMPEG); break; } } if (isset($interSrcProfile)) { break; } } } else { if (isset($mediaSet->_video) && !isset($mediaSet->_audio)) { foreach ($profile->_flavors as $flvr) { if (preg_match('/widevine/', strtolower($flvr->_tags), $matches)) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::FFMPEG); $forceAudioStream = true; break; } } } else { if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("wvc1", "wmv3")) && isset($mediaSet->_contentStreams) && isset($mediaSet->_contentStreams->video) && count($mediaSet->_contentStreams->video) > 0 && isset($mediaSet->_contentStreams->video[0]->progressiveSegmented) && $mediaSet->_contentStreams->video[0]->progressiveSegmented == true) { foreach ($profile->_flavors as $flvr) { foreach ($flvr->_transcoders as $trans) { if ($trans->_id == KDLTranscoders::FFMPEG) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::MENCODER); break; } } if (isset($interSrcProfile)) { break; } } } } } } } } /* else if($mediaSet->_video->IsFormatOf(array("tscc","tsc2"))) { $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::FFMPEG); } */ /* * If no "inter-src" cases ==> get out */ if (!isset($interSrcProfile)) { return null; } KalturaLog::log("Automatic Intermediate Source will be generated"); $targetList = array(); $this->Generate($mediaSet, $interSrcProfile, $targetList); if (count($targetList) == 0) { return null; } if (!isset($targetList[0]->_video->_width)) { $targetList[0]->_video->_width = 0; } //Add silent track to video if ($forceAudioStream) { //When duration is set on the source we will use it instead of the -shortest to avoid large difference between video and audio difference if ($this->_srcDataSet->_video->_duration) { $useToAddSilence = "-t " . $this->_srcDataSet->_video->_duration / 1000; } else { $useToAddSilence = "-shortest"; } $cmd = $targetList[0]->_transcoders[0]->_cmd; $cmd = str_replace("__inFileName__", "__inFileName__ -ar 44100 -ac 2 -f s16le -i /dev/zero " . $useToAddSilence, $cmd); $cmd = str_replace("-an", "-b:a 64k", $cmd); $targetList[0]->_transcoders[0]->_cmd = $cmd; } return $targetList[0]; }