#javascript #html5
Господа, парой строчек кода, как в приведенном ниже примере, можно реализовать вещание радио. На стандартной Audio панели есть кнопка скачать (стрелка вниз), если бы в место ссылки на радио поток, как в данном примере была бы ссылка на аудио файл, то он бы просто скачался и все, вопроса нет... А как реализовать скачивание одной песни или какого-нибудь фрагмента радио потока? Если в данной реализации кода нажать кнопку "СКАЧАТЬ", то скачивание начнется, ни как не могу сообразить как реализовать остановку скачивания. Есть такая возможность, при скачивании потока, выдернуть (перенести в другую папку или диск, скопировать) его в другое место и остановить скачивание и и этот скаченный файл остается, это все в ручную... Вопрос: как не вручную реализовать остановку скачивания ? Дополняю вопрос примером на JS без тега audio, а с объектом new Audio. В втором примере тоже простой кусок кода на js которая запускает воспроизведения Радио потока. Play воспроизводим, Pause останавливаем. А как сделать так, что бы нажав кнопку Radio Save Start начать запись, а нажав кнопку Radio Save Stop остановить запись и сохранить var radio = new Audio(); radio.src = "http://chanson.hostingradio.ru:8041/chanson128.mp3?"; document.querySelector('#radioPlay').onclick = function() { radio.play() } document.querySelector('#radioStop').onclick = function() { radio.pause() } document.querySelector('#radioSaveStart').onclick = function() { /*как тут начать запись*/ } document.querySelector('#radioSaveStop').onclick = function() { /* и как тут закончить запись и сохранить*/ } div { margin: 10px; width: 150px; height: 20px; background: gray; }PlayStopRadio Save StartRadio Save Stop
Ответы
Ответ 1
Как реализовать сохранение фрагмента радио потока с сайта? Ровно так же, как и скачивание абсолютно любых других файлов с вашего сервера, а будет ли это фрагмент потока с радио или видеоклип - дело десятое. А как реализовать скачивание одной песни А где у радиопотока есть такая сущность (абстракция) как "песня"? В радиопотоке может говорить ведущий с утра до вечера, ни одной песни не прозвучит... Что же тогда должна будет скачивать программа, которая о таком не знает? ни как не могу сообразить как реализовать остановку скачивания. Никак. Начать хотя бы с того, что скачивание может быть начато не самим браузером, а каким-либо внешним приложением. А доступа к приложению, конечно же, у вас нет. Но, как тут уже сказали, можно со стороны сервера оборвать соединение. Качалки на это могут отреагировать по разному, но в общем и целом, они посчитают, что файл уже скачан целиком, тем самым сохранят некий ошметок. В айскасте есть даже специальный метод, который позволяет кильнуть клиента, а вот понять кого надо килять - сложно, по ошибке можно пристрелить поток браузера. Дополняю вопрос примером на JS без тега audio, а с объектом new Audio. Совершенно не важно как вы инстанцируете этот примитивный плеер аудиопотоков. Через тег или еще через что-то. Функции сохранения, которая вам так нужна, в нем просто нет. А как сделать так, что бы нажав кнопку Radio Save Start начать запись, а нажав кнопку Radio Save Stop остановить запись и сохранить Ну я же не могу пользователю, посетителю сайта предложить - "Батенька, когда вы будете скачивать понравившуюся вам песню, прослушивая радио, будьте любезны, откройте папочку в которую вы скачивайте фрагмент, перенесите его в другую папку, отмените скачивание, потом уберите из название последний кусок до точки, потом перенесите куда хотите "? Для этого надо писать приложения на нормальном языке программирования, а не том, что маркетологи так яро скармливают в своих докладах. В частности, в этом языке должна быть явно прописана работа с сетью, подключение к серверу, передача заголовков, прием байтиков, скармливание этих байтиков декодеру и файловому дескриптору, ну и прочие сложности и глупости, которые присущи устаревшим языкам программирования и которых нету в таком прекрасном языке как Джаваскрипт. Собственно, выше - написано как это сделать, просто вместе с декодером вы отправляете данные и в файл, но так как в "веб-платформе" всего этого нет, разделить все это не выйдет, то ничего не получится. Подробнее об этом можно почитать у Джоэла Спольски в его Законе дырявых абстракций. И или отказаться от идеи, или переписать свой проект на чем-то другом, хотя бы на загнивающем Adobe Flash, который все же является более жизнеспособной платформой, чем современный JSОтвет 2
Вы хотите это сделать на стороне браузера. Дело в том что если вы запустили закачку, то управление этой закачкой скорее всего уже только у браузера и управлять ею через javascript нельзя. Предлагаю сделать эту функцию на стороне сервера. При нажатии на кнопку сервер начинает скачивать файл, когда нажата кнопка прекратить сервер прекращает скачивать файл, и возвращает клиенту ссылку на скачивание через AJAX. Либо скачивать не стандартной скачивалкой браузера, а через AJAX, тут нужно искать библиотеку для потоковой закачки файла. Или использовать стандартный fetch, в этой статье написано что используя fetch можно иметь доступ к частично скачанному контенту, но как я понял эта функциональность fetch дорабатывается. Тут описан стандарт для fetch readable stream.
Комментариев нет:
Отправить комментарий