New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for HTTP audio output streaming #56
Comments
Asssuming the follwing code: import logging
from BaseHTTPServer import BaseHTTPRequestHandler
from mopidy import get_version
logger = logging.getLogger('mopidy.outputs.http')
class StreamingHTTPRequestHandler(BaseHTTPRequestHandler):
server_version = 'HTTPOutput/%s' % get_version()
def do_GET(self):
self.send_response(200)
self.send_header('content-type', 'audio/mpeg')
self.end_headers()
register_fd_with_output(self.wfile.fileno())
self.close_connection = 0
def log_message(self, format, *args):
logger.info(format, *args) where For additional features like metadata the following links should be useful: |
The code above should probably not be used for solving this issue. With the current state of the code base we want something that builds on cherrypy. First thing that needs to be done is to create and register a GStreamer element we can use in the As for the HTTP part, there is at least to ways of going about it. First one is probably the easiest, start an independent cherrypy server to the frontend one and use that. The second one, the one I think we want is having a singleton HTTP server shared between the frontend and streaming parts of the code. This part is currently the big unknown as far as I am concerned. Once a HTTP server is in place we need to detach the socket from cherrypy, looking at ws4py it seems setting Other part the is slightly unknown is if we extend our core audio API to allow for emitting the FDs. That is either something specialized for just that case or something more general that gives access to the output bin we are using. |
Why I never thought of this earlier I have no idea, but as for stealing sockets, we should just us |
Are there plans to add output streaming in the near future? |
I know this is months old, but this is the only thing holding me back from switching from vanilla MPD. I run MPD on my server, which has no speakers attached, and tune in to the HTTP stream from various computers/devices around the house and elsewhere. I'd LOVE to see this in Mopidy. And if it's already there, please point me in the right direction! Been reading the manuals for a while and can't seem to find a way to get this working. |
AFAIK it is possible to get working HTTP streaming from Mopidy by combining it with Icecast and a couple of hacks, documented at https://docs.mopidy.com/en/latest/config/#streaming-through-shoutcast-icecast Work is ongoing on a gapless branch (see #1288) which together with the next round of gapless improvements should make Mopidy+Icecast work without any hacks to keep the stream alive. |
Just want to chime in that I also have serious interest in HTTP Streaming. I want to use it to listen to Spotify on the awesome Moped web interface, from my web server/VPN, at work. Was rather upset when I ran it locally and heard music, then got a tonne of JACK errors when I tried to run it remotely. If I knew how to code better I'd try it myself. Thanks! |
@jodal Are the issues you mentioned regarding #1288 resolved? i.e. Can this part of the documentation be removed?
|
@johnmaguire I don't if there's a section somewhere in the docs we've forgotten since you don't include a link. AFAIK the "develop" version of the docs are up to date with the upcoming changes in 2.0. |
Sorry: https://docs.mopidy.com/en/latest/config/#streaming-through-shoutcast-icecast It seems it was updated in the develop version of the docs, you're correct: https://docs.mopidy.com/en/develop/audio/#streaming-through-icecast Thanks @jodal! |
any updates in the past 2 years? |
any updates in the past 5 years? |
No. Icecast remains the best solution. As part of Mopidy 3 we bumped out minimum supported version of GStreamer which opens up some better options for HTTP streaming e.g. hlssink2. If anyone is interested in pursuing this then that might be a good place to start. |
Snapcast is another solution. It's made for multiroom playback, but I don't see any reason it can't be used for streaming to a single client too. I haven't tested it, but it looks promising. |
Yes, I've used snapcast. The use of a fifo is a bit fiddly and a new alternate method was being developed but last I heard that method came with its own issues. Also note that it is not http streaming. |
Hi there, for a long time I have been looking for a solution to get my mopidy / snapcast server combination to send a music stream to my devices on my local network. I have mopidy and snapcast running on a RASPI as my central music server: Now I have other devices on my network, that are capable to receive mp3 streams for example: https://hermes.bcs-systems.de/radio-lausitz_simulcast_192k_mp3, but I have no idea how to convert the mopidy server ip: http://192.168.10.32:6680 into the mp3 streaming URL required by my device. Finally I found in this thread the statement from kingosticks "Yes, I've used snapcast. The use of a fifo is a bit fiddly and a new alternate method was being developed but last I heard that method came with its own issues. Also note that it is not http streaming." Please direct me to a description, how mopidy or snapcast has to be setup and configured to do what I am looking for. Thanks so much! DidoTx |
General questions belong at https://discourse.mopidy.com/. If you have any follow up questions, start a new topic there and not here. Snapserver utilises a custom protocol i.e. not HTTP and only streams to snapclient. You can either wait for a fixed version of icecast (looks like it'll be available in Ubuntu 22.04) and and use Mopidy feeding both Snapcast and Icecast (such a dual output setup can be adapated from the one provided at https://docs.mopidy.com/en/latest/icecast/). Or, stay with Mopidy feeding only Snapcast and have a snapclient whos job it is to pipe output into a HTTP server like:
That |
If one provided a stream of the audio played by Mopidy over HTTP, it could be used by both MPD clients with support for HTTP streams and devices like e.g. Squeezeboxes.
The stream encoding should probably be Ogg Vorbis and/or MP3.
The text was updated successfully, but these errors were encountered: