2020-12-13: this program is now like me, useless. All the channels are served obfuscated with DRM. I don't have time to hack something to bypass the obfuscation.

2015-04-28: "service plan" might have permanently changed. I may do a new release in the future. In the meantime, run as:
./tv -s http://rp-live.woopic.com/live-webapp/live/servicePlan.json
By the way, it's a good idea to have a local copy of this file and use it in case of trouble.

Orange TV standalone client

Introduction

A (at some point of the past) little (not so little anymore, shame on me) program to watch TV served by Orange via Microsoft Smooth Streaming on my GNU/Linux (X11/OpenGL/ALSA) computer (DRM channels not handled). OpenGL is only used to vsync video updates. If you know of an X way, let me know.

This program is a hack. It may fail to work. Use at your own risk. Security issues are everywhere.

A screenshot? The channel/program description overlay that you see here is only displayed shortly when you arrive on a channel.

[image: a screenshot]

Another one with the equalizer's controls? As you can see, I like to remove lots of trebble to feel comfortable with my poor headphones.

[image: a screenshot with the eq]

Yes, there is a fullscreen mode too. Please behave.

If you have some tearing, you may want to configure X to disable tearing directly in the X server. I did it on debian testing.
Create the file /etc/X11/xorg.conf.d/20-intel.conf with content:

Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "TearFree"    "true"
EndSection

Not sure that it's a good idea, may have global unexpected effects. Works for me.

Download

[2017-03-12] orangetv-1.6.tar.gz: deal with FPS not 25 (hackish, but seems to work, I wait for orange to change everything for my program to fail), network and CPU usage control (orange does not stop to throw higher and higher quality, which smokes network and CPU for no real benefit, 640 pixels are enough), new options -r -nr -no-drm -no-no-signal -mw (woo! that much!).
[2017-01-27] orangetv-1.5.tar.gz: better audio/video synchronization, better download management, some bugs fixed. Should work better.
[2016-12-27] orangetv-1.4.tar.gz: downloading was completely wrong. I took the 'increment' from the manifest file instead of decoding MOOF/TRAF/TFRF (not sure I need to use TFRF, maybe I can/should use TFXD; for the moment it seems to work). The symptom was that sometimes audio or video would stop completely (because I downloaded from the wrong URL). A bug with "timescale" was fixed (not set correctly for some channels, completely destroying audio/video synchronization, and maybe other stuff too). Option -t was added for a better zapping experience. I'm still not fully satisfied with audio/video synchronization.
[2015-07-01] orangetv-1.3.tar.gz: better handling of downloads. Audio stopped after a while. It used to work! Maybe they changed their server. But the bug was here, I won't deny it.
[2015-06-27] orangetv-1.2.tar.gz: modified the X code, it didn't work anymore with a debian update. And now I have tearing in window mode and I don't know how to smash it. I tried the openGL extension stuff (swap interval), didn't work. I don't know... In fullscreen no tearing.
[2015-05-09] orangetv-1.1.tar.gz: -s option, an X crash removal.
[2015-03-XX] orangetv-1.0.tar.gz: initial release.

tv.exe: win32 version (from source code 1.6), may work, may fail, not tested. Version 1.5 was working okay fullscreen on a test I did but not okay in a window (video slows down). Go figure. No test was done with version 1.6 but nothing win32-specific has changed so I don't expect non fullscreen to work. (But that may depend on the version of windows. Frankly I don't care much. The windows version was made for fullscreen usage.)
I wasted way too much time on it, but I like the hack. Read the sources for the fun, in the microsoft/ subdirectory (yes I emulate X Window and ALSA!).

MS-SSTR.pdf: the specs of smooth streaming, I think. Put here for availability.

Usage

Well, just watch TV in front of your computer.

Advised command line:

    ./tv -t 100

To skip useless DRM and 'no signal' channels (skipping 'no signal' takes some time at startup):

    ./tv -t 100 -no-drm -no-no-signal

Want to limit network and CPU usage? Give max width of stream. A good value is 640 I would say. (I see streams with widths: 320, 400, 480, 640, 1024, 1280. The program outputs 'INFO' lines in the terminal with used widths by the stream. By default the program takes the bigger found.)

    ./tv -t 100 -mw 640

By default the program will be 10 seconds late with realtime (well, with the latest data available on the server). The server stores more. If you want to see all what the server stores, do:

    ./tv -t 100 -nr

For the microsoft version, you can specify command line arguments. I think you do it by editing properties of the program (right click on it?).

Here is the README (from 1.4):

orangetv - a basic Orange TV client for linux

This program is a hack. It works as of me writing this text (2015-03-20).
It may fail to work as of you trying to use it.

IMPORTANT!
The program only works if you use it inside the Orange's network
(say you are Orange's client and you are at home). I think you also
need to subscribe for the TV.

Type 'h' for help when you start the program.

To compile: make
To compile for windows: make -f microsoft/hack/Makefile
(you need mingw stuff and so on)

Dependancies:
  libcurl (curl)
      to download data from the internet
  libfaad (http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz)
      to decode compressed audio data
  libavcodec/libavutil/libswscale (those from ffmpeg)
      to decode compressed video data
  libcairo (cairo)
      to draw the GUI of the equalizer
  libasound (ALSA)
      to output audio
  libX11 (X Window)
      to display video
  libGL (OpenGL)
      to avoid tearing effect (video update is synchronized with vertical
      sync under OpenGL, contrary to direct X Window) (well, at least on my
      computer)

==================================================================
IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT!
Under Debian (here I have testing) the libavcodec does not work
(it gives wrong video). You need the one from ffmpeg.
Note: 2016-12-27: Debian testing has the ffmpeg version as it
seems. It works for me.
==================================================================

It works with channels served using the Microsoft's Smooth Streaming
thing with AAC codec for audio and H264 codec for video. DRM 'protected'
channel are not viewable.

Released in the public domain.
Well... I stole code here and there, code that might be released
under the GPL or other stuff, so legally I think I can't release
it in the public domain. Thing is: I don't care. It's free
software, done in the spirit of free software, don't piss me off
(as if anyone would care). (But honesty has her hammer directed
at my brain and I want to keep that piece of me functional for a
little while.)

The font (file ter-u16v.bdf) is from http://terminus-font.sourceforge.net/
(version 4.39).

http://sed.free.fr/orangetv
contact: sed@free.fr

To be done

Important

Write a hack to let anyone on Earth watch Orange TV.

I am almost sure (as of 2015-03-21) that the raw audio and video data can be downloaded from anywhere on this little planet (at least from anywhere in France, even if your computer is not in the Orange's network). What does not work is to get the, let's say, metadata describing the raw data. I have some ideas on how to extract this stuff from inside the Orange network and give it to the world. The biggest problem is to overcome something called laziness.

Slightly important

I think I could write some kind of tutorial on various programming techniques used in there. This program is small and complex enough to be interesting. But did I already mention laziness or not?

Not so important

Do minor stuff, like pause/record, this and that, here and there.


Contact: sed@free.fr

Created: Sat, 21 Mar 2015 21:49:36 +0100
Last update: Sun, 13 Dec 2020 22:12:12 +0100