Как записать mp3-поток с помощью Python

Какой лучший способ захватить mp3-поток, исходящий из http, и сохранить его на диск с помощью python?

До сих пор я пробовал

target = open(target_path, "w")
conn = urllib.urlopen(stream_url)
while True:
    target.write(conn.read(buf_size))

Это дает мне данные, но они искажены или не воспроизводятся в mp3-плеерах.

Можете указать дополнительную информацию? Что это за стриминг? Обычный mp3 (не могли бы вы также сохранить его с помощью «Сохранить как ...»)? В противном случае протокол может содержать больше информации, чем просто аудиоинформация.

Andre Bossard 09.10.2008 18:39

это в конечном итоге сработало, но никогда не выходило из предложения while. Мне нужно добавить дополнительный код, чтобы он правильно завершил работу?

ChrisArmstrong 14.07.2013 00:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
11
2
4 800
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вы работаете в Windows, вы можете случайно выполнить преобразование CRLF, повредив двоичные данные. Попробуйте открыть target в двоичном режиме:

target = open(target_path, "wb")

Лучше всего для этого:

urllib.urlretrieve(stream_url, target_path);

Возможно, синтаксис изменился по сравнению с предыдущим ответом urllib (который привел меня к правильному ответу, кстати), но этот синтаксис работает для python3:

import urllib.request

urllib.request.urlretrieve(stream_url, target_path)

Другие вопросы по теме