Well I've had some success with porting the streaming TV client application to Linux under Mono. All of the credit remains with the developers of MediaPortal for their excellent server application, however for my part I was able to fix a few incompatibilities between .NET on Windows and that on Mono.
I found that there were three main problems:
Remoting between a Mono client and a Windows server
.NET remoting is used in this application to provide the remote-control capability between the client and the server. This allows the client to change the channel being streamed, remotely from the client.
Remoting is the remote procedure call mechanism that superceded DCOM (COM+) in the older Microsoft COM technologies. It is a mechanism for a client machine to make a call to a server, and hold a connection to that server, in an object orientated way. Calls from the client are routed to the server in this case in a binary serialised format. Maintaining the compatibility of this mechanism between Mono and Windows is a big ask, but true to form the Mono Project have achieved that.
I had to do some debugging to work out what was causing this area to fail initially in my tests, but once I'd seen how it worked and installed the correct Mono runtimes, it turned out not to be a problem at all, merely that I needed to use an IP address rather than the server host name.
Live EPG
The second problem I had was the connection to the SQL Server backend of the TV Server application. MediaPortal use the Gentle Framework to provide database independence for the application. The database stores information like the EPG as well as the list of available cards and channels. I could not get the Gentle Framework to work on Mono, although I suspect that again might be partly down to me. I'll look into it further at some point as it might only be due to missing runtimes once again. When I find which are missing, they're easy to install.
For the moment, I created a web service which runs on the server and provides the information required by the client. Using web services is very simple in .NET and so this resolved the issue immediately.
Windows Forms UI
As the client application provided by MediaPortal was intended for Windows, it worked, but not very well, under Linux. I decided to rewrite it using Gtk# as explained in my previous posts so that it would look more native on both platforms.
The result
I now have a panel type application which has a button for every channel tuned on the server. These are discovered automatically by the client from the server. Simplying clicking on the channel starts the server streaming, and then starts VLC to receive that stream on the client. Clicking on an alternative channel stops VLC, changes the streaming channel on the server and restarts VLC.
I can't believe how long I've been searching for a solution to this problem and thanks almost entirely to the team at MediaPortal and the impressive Mono platform for Linux, I have at last achieved exactly what I want.
I will be able to increase the tuner count in the server in a single location in my house (where the TV signal comes in), and then use those tuners from any machine connected to the network. There's no problem with multiple clients on multiple channels simultaneously, and it's all cross-platform to boot. Excellent!
Subscribe to:
Post Comments (Atom)
1 comment:
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the TV Digital, I hope you enjoy. The address is http://tv-digital-brasil.blogspot.com. A hug.
Post a Comment