2014-05-03 18:40 GMT+02:00 Brad Isbell <brad at musatcha.com>:> The general idea was to make a really simple source client that could be > launched with a single click (such as from a hosting provider's admin > panel). The client accepts parameters on the query-string for configuring > so that in a real-world environment, the user would not have to configure > anything. It is also built in such a way that the UI can be thrown away, > leaving the back-end code to integrate into another application.Wow! That screams for integration with Icecast2 web admin panel if opensourced!! Cheers, Xabier Oneca_,,_
Thanks everyone! I will answer your questions regarding the AudioPump Web Encoder (http://demo.audiopump.co:3000/): *> Can you please explain the process exactly? what is the encoding server?* There is a server built on Node.js that receives audio data, control data, and metadata from the client over a binary websocket. All of these are multiplexed down the same connection. When the server receives audio data, it will pass it off to an external encoder via STDIO. For testing purposes, I am using FFmpeg, but you can use anything you want. All that matters is that it accepts PCM and outputs something that I can send to the streaming server. *> is your code production-ready?* It is close. The code works well for the users that are using it in production today, but I would certainly like to test with more users and browsers. One challenge are browser bugs that I can't do much about. For instance, the VU metering doesn't work in stereo on Firefox because the Firefox splitter node is broken. Some folks have used this software to do live remotes on both mobile and desktop with success. Most of the issues I have seen have been already patched in development versions of the browsers, so it is just a matter of time before they are handled in the releases. *> can it work with Icecast?* Yes, you can use SHOUTcast mode with Icecast currently. Due to requests from the community, I will implement HTTP PUT support to add compatibility with Icecast 2.4. This shouldn't be too hard to finish... it's a feature I had been planning for. I will e-mail the list again when this functionality is enabled (or if that is considered spam, let me know and I will only e-mail those that replied to me). *> Out of curiosity, what are you using as the intermediate codec?* Only PCM is possible today, with the Web Audio API. Even if the browser supports the codec, it is only accessible with WebRTC calls. I originally went down the path of a server-side WebRTC client. This proved to be a nightmare and not really feasible at the moment. One guy seems to have gotten it working over a year ago by importing a huge chunk of Chromium (libjingle and all that), but that code doesn't seem to work anymore due to the internal structure of Chromium changing dramatically. Running the binaries he built result in segfault. If anyone knows of a way to record WebRTC server-side, please let me know. I'm sure this will be possible in the near future, but for now it's too difficult (at least for me). In the mean time, I am sticking with PCM. I convert the 32-bit floating point samples from the Web Audio API into 16-bit or 8-bit samples, and then convert them back up server-side. The intent is to adjust for bandwidth conditions on the fly, but for now I just let the user pick the desired bit depth. Since the server converts it back up to 32-bit before sending to the encoder, you can change bit-depth on the fly mid-stream. In the future, I hope to add some client-side codec (at least FLAC). I also need to be cautious of licensing, if I am going to include a codec via JavaScript. If there is a silver lining, it's that you only compress once with this method, giving you better quality audio than re-compressing something that was already encoded lossy. *> will it be open source or is this a commercial solution?* Commercial. I am developing software to help improve internet radio, and have just started AudioPump, Inc. <http://audiopump.co> to help with that goal. If at some point I can make other products more profitable, I would love to open source some of my work. But, that is not something I can do at the moment. If you have interest in using this or part of it commercially, please contact me at brad at audiopump.co. with information on your project and we can chat about it. *> Wow! That screams for integration with Icecast2 web admin panel if opensourced!!* Thanks for the note, but even if open sourced, I don't think it would be a good candidate for integration due to its reliance on Node.js. Icecast developers could certainly develop something similar, however. If I were a C++ developer, I would definitely consider contributing. If any Icecast developers have questions about the implementation, I am happy to help with any information I can provide. Brad Isbell brad at musatcha.com http://www.musatcha.com On Sun, May 4, 2014 at 10:30 AM, Xabier Oneca -- xOneca < xoneca+icecast at gmail.com> wrote:> 2014-05-03 18:40 GMT+02:00 Brad Isbell <brad at musatcha.com>: > > The general idea was to make a really simple source client that could be > > launched with a single click (such as from a hosting provider's admin > > panel). The client accepts parameters on the query-string for > configuring > > so that in a real-world environment, the user would not have to configure > > anything. It is also built in such a way that the UI can be thrown away, > > leaving the back-end code to integrate into another application. > > Wow! That screams for integration with Icecast2 web admin panel if > opensourced!! > > Cheers, > > Xabier Oneca_,,_ > _______________________________________________ > Icecast mailing list > Icecast at xiph.org > http://lists.xiph.org/mailman/listinfo/icecast >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/icecast/attachments/20140505/9f25ae81/attachment.htm
Hi, 2014-05-05 18:01 GMT-05:00 Brad Isbell <brad at musatcha.com>:> Thanks everyone! I will answer your questions regarding the AudioPump Web > Encoder (http://demo.audiopump.co:3000/): > >> Can you please explain the process exactly? what is the encoding server? > > There is a server built on Node.js that receives audio data, control data, > and metadata from the client over a binary websocket. All of these are > multiplexed down the same connection. When the server receives audio data, > it will pass it off to an external encoder via STDIO. For testing purposes, > I am using FFmpeg, but you can use anything you want. All that matters is > that it accepts PCM and outputs something that I can send to the streaming > server. > >> is your code production-ready? > > It is close. The code works well for the users that are using it in > production today, but I would certainly like to test with more users and > browsers. One challenge are browser bugs that I can't do much about. For > instance, the VU metering doesn't work in stereo on Firefox because the > Firefox splitter node is broken. Some folks have used this software to do > live remotes on both mobile and desktop with success. Most of the issues I > have seen have been already patched in development versions of the browsers, > so it is just a matter of time before they are handled in the releases. > >> can it work with Icecast? > > Yes, you can use SHOUTcast mode with Icecast currently. Due to requests > from the community, I will implement HTTP PUT support to add compatibility > with Icecast 2.4. This shouldn't be too hard to finish... it's a feature I > had been planning for. I will e-mail the list again when this functionality > is enabled (or if that is considered spam, let me know and I will only > e-mail those that replied to me). > >> Out of curiosity, what are you using as the intermediate codec? > > Only PCM is possible today, with the Web Audio API. Even if the browser > supports the codec, it is only accessible with WebRTC calls. I originally > went down the path of a server-side WebRTC client. This proved to be a > nightmare and not really feasible at the moment. One guy seems to have > gotten it working over a year ago by importing a huge chunk of Chromium > (libjingle and all that), but that code doesn't seem to work anymore due to > the internal structure of Chromium changing dramatically. Running the > binaries he built result in segfault. If anyone knows of a way to record > WebRTC server-side, please let me know. I'm sure this will be possible in > the near future, but for now it's too difficult (at least for me). In the > mean time, I am sticking with PCM. I convert the 32-bit floating point > samples from the Web Audio API into 16-bit or 8-bit samples, and then > convert them back up server-side. The intent is to adjust for bandwidth > conditions on the fly, but for now I just let the user pick the desired bit > depth. Since the server converts it back up to 32-bit before sending to the > encoder, you can change bit-depth on the fly mid-stream. In the future, I > hope to add some client-side codec (at least FLAC). I also need to be > cautious of licensing, if I am going to include a codec via JavaScript. If > there is a silver lining, it's that you only compress once with this method, > giving you better quality audio than re-compressing something that was > already encoded lossy. > >> will it be open source or is this a commercial solution? > > Commercial. I am developing software to help improve internet radio, and > have just started AudioPump, Inc. to help with that goal. If at some point > I can make other products more profitable, I would love to open source some > of my work. But, that is not something I can do at the moment. If you have > interest in using this or part of it commercially, please contact me at > brad at audiopump.co. with information on your project and we can chat about > it. > >> Wow! That screams for integration with Icecast2 web admin panel if >> opensourced!! > > Thanks for the note, but even if open sourced, I don't think it would be a > good candidate for integration due to its reliance on Node.js. Icecast > developers could certainly develop something similar, however. If I were a > C++ developer, I would definitely consider contributing. If any Icecast > developers have questions about the implementation, I am happy to help with > any information I can provide.Thanks for these information. For the webcast.js project, we chose to implement a client-side mp3 encoding, using emscripten and the shine mp3 encoder. This works fine on firefox where asm.js is supported but is borderline real time on chrome.. See: https://github.com/webcast/webcast.js/blob/master/API.md and https://github.com/savonet/shine/tree/master/js A convenient client-side native Javascript API for encoding audio would be much desirable but, unfortunately, there was nothing mature and/or usable last time I checked.. Romain