ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

Запись Icecast и Shoutcast

 

28
alexgard @alexgard
Здравствуйте. Стоит задача записывать аудио поток в файл по средствам php.

Но, как всегда есть одно маленькое но... Мне нужно записывать эфир с периодичностью в 10 минут и чтобы эти файлы при склеивании звучали непрерывно.

Самый простой способ записать поток:


$src = fopen('http://www.example.com', 'r');
$dest1 = fopen('song.mp3', 'w');

stream_copy_to_stream($src, $dest1, 1024);



Но, этот вариант запишет только 1024 байт и остановиться... А как записать по времени?

Заранее благодарен!

6245
Тарас @tarasian666
на пальцах вариант 1
while (начальное врменя + 10минут <= текущего времени)
{
stream_copy_to_stream($src, $dest1, 1024);
}
вариант 2 в зависимости от битрейта можно аожно посчитать количество бит в 10ти минутах и
stream_copy_to_stream($src, $dest1, просчитаное количество бит);


возможно появятся еще варианты )

28
alexgard @alexgard
tarasian666 пишет:

на пальцах вариант 1
while (начальное врменя + 10минут <= текущего времени)
{
stream_copy_to_stream($src, $dest1, 1024);
}
вариант 2 в зависимости от битрейта можно аожно посчитать количество бит в 10ти минутах и
stream_copy_to_stream($src, $dest1, просчитаное количество бит);


возможно появятся еще варианты )


Спасибо за ответ. 1 вариант хороший, но цикл занимает время и при склеивании файлов будет искажение звука...

А по поводу 2 варианта, битрейт не переменный?

6245
Тарас @tarasian666
желательно постоянный, хотя может и с переменным получится если просчитать среднее арифметичное но тогда и куски могут быть не 10 минут а + -

28
alexgard @alexgard
tarasian666 пишет:

желательно постоянный, хотя может и с переменным получится если просчитать среднее арифметичное но тогда и куски могут быть не 10 минут а + -


Остановился на Вашем 1 варианте.

Вот что у меня получилось:


$start = microtime(true);

while(true) {
if ((float)(microtime(true) - $start) > 600)
{
break;
}
stream_copy_to_stream($src, $dest1, 1024);
}




Получается на 2-3 секунды дольше, но зато работает и файл без искажений!!!))))

Спасибо!!!