Воспроизведение файла .mp3 с помощью pyglet после его загрузки с помощью сервера cherrypy

Я пытаюсь воспроизвести файл .mp3 после его загрузки через cherrypy. Я могу загрузить его во временный файл, но я могу воспроизводить только небольшие файлы .mp3, большие файлы дают исключение с плавающей запятой на pyglet.

Вот мой код сервера:

import cherrypy
import os
from cherrypy.lib.static import serve_file

class Download:

    @cherrypy.expose
    def index(self, file_):
        tgt = os.path.abspath(os.path.join('./music', file_))
        return serve_file(tgt, "application/x-download", "attachment")

if __name__ == '__main__':
    cherrypy.quickstart(Download())

Вот мой клиентский код:

import requests
import pyglet


def download_file(file_):
    print(file_)
    data = {'file_': file_}
    r = requests.get("http://localhost:8080/index",
                     params=data,
                     stream=True
                     )

    local_filename = './tmp.mp3'
    with open(local_filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:  # filter out keep-alive new chunks
                f.write(chunk)
                f.flush()
    print(local_filename)
    return local_filename

src = pyglet.media.StaticSource(pyglet.media.load(download_file('b.mp3')))
player = pyglet.media.Player()
player.queue(src)
player.play()
pyglet.app.run()

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


person L.Lelito    schedule 13.09.2015    source источник


Ответы (1)


Итак, вам нужен html-тег, который получает mp3-файл и передает его пользователю. Самый простой способ сделать это - сделать что-то вроде этого...

@cherrypy.expose
def index(self, file_):
    tgt = os.path.abspath(os.path.join('./music', file_))
    return """
<audio controls>
  <source src="%s" type="audio/ogg">
  <source src="%s" type="audio/mpeg">
  Your browser does not support the audio tag.
</audio>
           """ % (serve_file(tgt, "application/x-download", "attachment"),)

Надеюсь это поможет!

person Andrew Kloos    schedule 14.09.2015