Is there any full-featured open source music streaming server out there? - streaming

I need a music stream server with at least these features:
1- open source
2- adaptive bitrate
3- multi-art support
4- scalable
5- simple encryption
I have installed some projects (Red, Mopidy, Icecast, ...) but til now I couldn't find a suitable one.

I don't know any server like that too (let me know if you will find one:) ), but in general everything can be built at the top of Icecast:
It's open source
This is usually achieved by creating several mount points with different bitrate,and providing your listeners with several links
they can choose the bitrate (or format, like mp3/aac) that will fit
their internet connection.
Create a script in PHP or any other language that will fetch the current artist & track title from Icecast and search for an image on
a music service like iTunes or Spotify (they have API for that). Some
source clients also provide images from MP3 tags, for example.
You can use Nginx as a load balancer in front of your Icecast instances, also there is a nice article about that
https://medium.com/#pereiragoncalo/icecast-in-production-7313cb5c95ff#.m4bf6yne7
Not sure what exact encryption you are talking about, but Icecast supports SSL, so you can have HTTPS links to your streams.

Related

How to get rid from intermediate server and manage direct connection from IP-PBX to the streaming software?

I found this article:
www.codeproject.com/Articles/1077937/Possible-ways-to-organize-interaction-between-co,
and I know that there exist a code for the flash player.
Can I use only code for managing connections (as in the articles examples) and free flash player code and therefore get rid from integration software?
You need to be more specific but in reality the idea of the integration software is the following:
Session management
Multi-codec/format support
Interface Resource
Scheduling
Normally IP PBX supports SIP only, hence you need the transcoding between the SIP world (Audio + Video) and the Webcast world (Web browser/client/camera). Integration software as the one defined do a pretty good job and some of them are open Source (Wooza), If you want to replace them, I would do it with an MCU which support RMTP/Flash. Take a look at McuWeb project. Otherwise you need to write SIP Client code as well to integrate it with the SIP world

How to find out if an app uses HTTP Live Streaming using a packet sniffer?

I need to test the application I developed, that uses HTTP Live Streaming ( audio only ) and I would like to see how it works in comparison with other similar apps. How can I conclude that an app uses HTTP Live Streaming by using a packet sniffer?
Look for a request for a playlist file with an .m3u8 extension and in the response look for #EXTM3U on the first line. The IETF draft should give you all the information you need to interpret the rest of the traffic.
Here are some values you might find useful if you want to look at the stream closer.
I have never tried this tool but Apple released a stream validator, all you need is the playlist URL.
Bear in mind that it's possible to use a number of different streaming technologies and it's a popular practice with alot of services to use the one which makes most sense at the time. If you don't simulate the correct environment you might never get an HLS stream at all.

How to make iPhone host like a stream web server

By reference http://www.subfurther.com/blog/2010/12/13/from-ipod-library-to-pcm-samples-in-far-fewer-steps-than-were-previously-necessary/, I have get AVAssetReader, how to create a url like "http:///a.mp3", so other machine can access this mp3 to download or play?
When you get a connection, write this header
char * header = "ICY 200 OK\r\n"
"icy-name:iPhone FM\r\n"
"icy-url:http://iphone-fm.com/\r\n"
"content-type:audio/mpeg\r\n"
"\r\n";
then simply write the raw mp3 data down the socket.
I'm not sure if you want to serve the mp3 as a file, or as streaming radio. If as a file, you should probably set the content length. If as a radio stream, then you should check out
http://www.smackfu.com/stuff/programming/shoutcast.html
and maybe implement streaming metadata for the song title, etc.
It's not trivial. Of course you could technically do it, since an iPhone has a full fledged TCP/IP stack. But, for a server you need to know its address before connecting to it.
What I've seen done in these cases is:
Turn on your APP
Show the URL to connect to based on its current address (you will probably be only able to connect through WIFI)
Use the client to connect to your iPhone Server.
Do keep in mind that this is extremely user unfriendly. You might want to consider a proxy server from your iPhone to the rest of the world in the middle.

See what website the user is visiting in a browser independent way

I am trying to build an application that can inform a user about website specific information whenever they are visiting a website that is present in my database. This must be done in a browser independent way so the user will always see the information when visiting a website (no matter what browser or other tool he or she is using to visit the website).
My first (partially successful) approach was by looking at the data packets using the System.Net.Sockets.Socket class etc. Unfortunately I discoverd that this approach only works when the user has administrator rights. And of course, that is not what I want. My goal is that the user can install one relatively simple program that can be used right away.
After this I went looking for alternatives and found a lot about WinPcap and some of it's .NET wrappers (did I tell you I am programming c# .NET already?). But with WinPcap I found out that this must be installed on the user's pc and there is nog way to just reference some dll files and code away. I already looked at including WinPcap as a prerequisite in my installer but that is also to cumbersome.
Well, long story short. I want to know in my application what website my user is visiting at the moment it is happening. I think it must be done by looking at the data packets of the network but can't find a good solution for this. My application is build in C# .NET (4.0).
You could use Fiddler to monitor Internet traffic.
It is
a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect traffic, set breakpoints, and "fiddle" with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.
It's scriptable and can be readily used from .NET.
One simple idea: Instead of monitoring the traffic directly, what about installing a browser extension that sends you the current url of the page. Then you can check if that url is in your database and optionally show the user a message using the browser extension.
This is how extensions like Invisible Hand work... It scans the current page and sends relevant data back to the server for processing. If it finds anything, it uses the browser extension framework to communicate those results back to the user. (Using an alert, or a bar across the top of the window, etc.)
for a good start, wireshark will do what you want.
you can specify a filter to isolate and view http streams.
best part is wireshark is open source, and built opon another program api, winpcap which is open source.
I'm guessing this is what you want.
capture network data off the wire
view the tcp traffic of a computer, isolate and save(in part or in hole) http data.
store information about the http connections
number 1 there is easy, you can google for a winpcap tutorial, or just use some of their sample programs to capture the data.
I recomend you study up on the pcap file format, everything with winpcap uses this basic format and its structers.
now you have to learn how to take a tcp stream and turn it into a solid data stream without curoption, or disorginized parts. (sorry for the spelling)
again, a very good example can be found in the wireshark source code.
then with your data stream, you can simple read the http format, and html data, or what ever your dealing with.
Hope that helps
If the user is cooperating, you could have them set their browser(s) to use a proxy service you provide. This would intercept all web traffic, do whatever you want with it (look up in your database, notify the user, etc), and then pass it on to the original location. Run the proxy on the local system, or on a remote system if that fits your case better.
If the user is not cooperating, or you don't want to make them change their browser settings, you could use one of the packet sniffing solutions, such as fiddler.
A simple stright forward way is to change the comupter DNS to point to your application.
this will cause all DNS traffic to pass though your app which can be sniffed and then redirected to the real DNS server.
it will also save you the hussel of filtering out emule/torrent traffic as it normally work with pure IP address (which also might be a problem as it can be circumvented by using IP address to browse).
-How to change windows DNS Servers
-DNS resolver
Another simple way is to configure (programmaticly) the browsers proxy to pass through your server this will make your life easier but will be more obvious to users.
How to create a simple proxy in C#?

How to build a client to Google wave

By looking at current Google wave APIs, I can't find a way to create an alternative client.
It's not a robot or gadget, and the embed API is very slim.
Nevertheless, I do see some clients out there - such as Waver and Waveboard.
How do they do it ? is it based on XMPP ?
Note that Waver and Waveboard aren't actual clients, rather single-application web-browsers wrapped around the official https://wave.google.com/wave/ URL.
The Wave Federation protocol comes with a Protocol Buffers based experimental client/server protocol. Some people are using that to make a client, but it's not yet interoperable with the existing wave infrastructure unless you set up your own server (it won't work with #googlewave.com users, you must set up your own wave federation server and have it communicate to that).
During Google I/O they announced the Google Wave Data API which allows a program to read and write to wave on behalf of a user using OAuth. I'm using it to create a true mobile client, but at the current state, it's still very limited and restricted to the actions of fetchWave, search and folderAction (markAsRead/Unread, mute and archive).
http://code.google.com/apis/wave/extensions/wavedataapi/index.html
Lars Rasmussen did mention the beginning of a public client/server protocol, but I can't yet find anything about it.