- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/integration/voximplant/audio.php
- Класс: Bitrix\Sender\Integration\VoxImplant\Audio
- Вызов: Audio::getMp3fileDuration
protected function getMp3fileDuration($fileId)
{
if (!$fileId)
return false;
$fileName = \CFile::GetPath($fileId);
if ($this->isRemoteFile($fileName))
{
$tmpFileName = \CFile::GetTempName('', 'tmpfile.mp3');
$request = new HttpClient([
"socketTimeout" => 5,
"streamTimeout" => 5
]);
$request->download($fileName, $tmpFileName);
$fileName = $tmpFileName;
}
else
{
$fileName = Application::getDocumentRoot() . $fileName;
}
$file = fopen($fileName, "rb");
$duration = 0;
$header = fread($file, 100);
$offset = $this->getId3v2TagLength($header);
fseek($file, $offset, SEEK_SET);
while (!feof($file))
{
$frame = fread($file, 10);
if (mb_strlen($frame, 'latin1') < 10)
{
break;
}
else
{
if ("\xff" == $frame[0] && (ord($frame[1]) & 0xe0)) // if 1111 1111 111x xxxx bits (header sequence) was found
{
list($frameLength, $frameDuration) = $this->getFrameInfo(mb_substr($frame, 0, 4, 'latin1'));
if (!$frameLength)
{
return $duration;
}
$offset = $frameLength - 10;
$duration += $frameDuration;
}
else
{
$offset = ('TAG' == mb_substr($frame, 0, 3, 'latin1')) ? 118 : -9;
}
fseek($file, $offset, SEEK_CUR);
}
}
return round($duration);
}