Writings Photos Code Contact Resume Me
planet debian

You are here

Justin TV without flash!

Submitted by msameer on Sun, 11/03/2012 - 3:18pm

Justin TV is a streaming service that uses the broken flash concept in order to allow you to view channels.

Unfortunately it's the only source of Arabic movies, series and shows.

I wrote a GStreamer source that retrieves the channel information and uses libRTMP to connect to the Justin streaming server. The rest is handled by GStreamer ;-)

If you want to watch http://www.justin.tv/ammartv for example, you simply do

gst-launch-0.10 playbin uri=jtv://ammartv

The 2nd plugin is a Totem plugin that indirectly utilizes the GStreamer source.
Given a language code (ar or en or ...), it will download the list of channels in that language and shows them in Totem's side panel. One can then easily double click on a channel and simply watch it. I originally wanted to do the Totem plugin in python but the inability to do asynchronous callback based HTTP requests prevented me :-(

Be warned that the code is of course a bit buggy and needs a lot of cleanups, it's been years since I coded anything in Gtk and that Justin might find out and either block the source somehow or even change the protocol but let's wait until that happens ;-)

Introducing vcamera, a virtual V4L2 camera.

Submitted by msameer on Mon, 20/06/2011 - 5:03pm

This is a kernel module I cooked in a couple of days. The idea is to expose a v4l device that gets its data from user space.

I had 2 use cases in mind:
1) Educational purpose for myself (I'm really a kernel noob).
2) Streaming movies over skype, google talk, ... etc.

The idea could be good or completely rubbish but hey ? Learning can only be done with stupid ideas!

The code is highly unstable. It shouldn't oops the kernel but I'm not responsible. I've been developing and testing it inside qemu.

Clone it from the git repository via:

git clone git@gitorious.org:vcamera/vcamera.git

Here are a few missing bits off the top of my head:

* I'm not following the kernel coding style yet ;-)
* I'm sure my locking, unlocking and concurrency handling is flawed.
* The code is a bit fragile.
* It'd be nice to implement mmap support for the character device. This should eliminate data copies.
* Perhaps expose the character device all the time and generate "fake" frames when streaming starts ? Problem now is one has to be very fast in feeding data to the module otherwise select() on the v4l device will timeout.
* Many more...

If someone finds this idea useful, please drop me a line.
Comments, use cases, ideas and tips are really welcomed!

If I see a lot of interest, I might try to push it to the kernel tree one day ;-)

Update: Seems vloopback already exists and renders my code useless. I might still do something with it as my idea seems a bit simpler but whatever.

Update 2: There's also v4l2loopback and its fork.

Egypt, Internet cut off. A massacre will follow. Please help.

Submitted by msameer on Thu, 27/01/2011 - 11:49pm

Egypt has been fighting for freedom already for 3 days now.

The whole country has experienced a large number of street demonstrations and protests within the last 3 days to be continued also on Friday, the 28th of January and afterwards.

The protests' main goal is to oust dictator Hosni Mubarak's regime, which has been in power for almost 30 years.

We want him out.

A massacre has happened in Suez. Police used live ammunition and tear gas. There are unconfirmed rumors that the army might interfere.

Even a bigger protest is supposed to take place a few hours from now. After the Prayer on Friday.

The internet has been shutdown completely. Egypt is no longer online since Friday, the 28th of January 00:45 AM.

Text messages to cell phones have been cut off too and all cell phones services will be following. No one knows exactly the intentions of the regime but it doesn't sound good.

Please help us.
Please blog about it in English and in all languages.
Please spread the news everywhere.
Please talk to media.
Please petition your government if that will help.

If there's anything that you can do, please do it and help us save the country and the people.

More news from twitter #jan25.

Twitter OAuth Proxy

Submitted by msameer on Tue, 14/09/2010 - 8:55pm

I'm using Twitter plugin for Contacts and Conversations to twitter on my N900.

Twitter recently moved to OAuth. Problem is the Maemo package is outdated and seems to be unmaintained.

I did some research and came across a blog entry about exploring OAuth-protected APIs and some code. Nice idea but not usable for me.

I ended up sitting down and writing a small python script that will re-route your HTTP requests to api.twitter.com after adding all the OAuth bills and whistles, read the reply from twitter and send it back. Neat ? :-)

There's also supertweet.net which I've discovered after I finished writing my script but seems they don't support all of the twitter API call while my script does that.

The script is simple without much error checking but it's been working for me for a few days already.

Last thing, I'm not interested in running a service like supertweet. I'll not be implementing the full OAuth protocol. Need to use it ? Register your own application.

Get the code while hot!

git clone git@gitorious.org:twitter-proxy/twitter-proxy.git

Next step: Thinking of maintaining the twitter plugin for Maemo. I already compiled the latest code and it sort of works fine :-)

ISI specifications for Nokia modems.

Submitted by msameer on Sun, 25/04/2010 - 9:48pm

A serious limitation of the N900 connectivity subsystem IMHO is the inability to create multiple connections. One can only have one connection at a time. This was a problem when I started investigating MMS support for N900.

Of course one can use some undocumented API like fMMS to have more than one GPRS connection. There's only 1 problem with that approach. You can end up with IP/subnet clash.

I've been thinking about a kind of hacky solution for the MMS problem: Let's have a tun interface with a known IP such as or 192.0.2.x. We force all of our traffic through that interface and "something" sits in the middle to route the data between tun and the GPRS modem.

Sounds easy but not that easy.

The only information available about ISI modems and GPRS manipulation is some patches adding GPRS support to Ofono.

I've been playing with them for a few days. I managed to get a PDP context which fails to activate.

Hmmm, Googling a bit revealed the Symbian Modem Adaptation project. The code is there but it wasn't enough.

What I didn't notice initially was a semi-hidden link to the wireless modem API server. There I found not only complete documentation for ISI; but also header files with al the constants. More than the ones available from the GPRS patches.

Now manipulating the modem is just the matter of reading the documentation (READ the license aggrement first before you get them), creating a bunch of phonet sockets, using sendmsg() and recvfrom() and parsing the output.

Now I wont wonder why does my phonet packet:

23:19:10.543792 Out ethertype Unknown (0x00f5), length 47:
        0x0000:  006c 3100 1a00 6a37 0600 2100 0000 0205  .l1...j7..!.....
        0x0010:  0e08 696e 7465 726e 6574 0040 0190 04    ..internet.@...

look different than the one sent by the connection manager:

23:16:58.296905 Out ethertype Unknown (0x00f5), length 47:
        0x0000:  006c 3100 1a00 6800 0600 2100 0000 0205  .l1...h...!.....
        0x0010:  0c08 696e 7465 726e 6574 0090 0402 00    ..internet.....

I'm using 0x0e while they use 0x0c

There'a also a hidden excel (DUH!) sheet showing which ISI API is mandatory and which is not.

Happy hacking!

P.S. This might be old information but I've just discovered it.

Not First MMS sent via N900 (Fremantle)

Submitted by msameer on Sun, 03/01/2010 - 4:27am

I've spent the past few days trying to get MMS to work on the N900.

EDIT: Seems frals has managed to beat me!

I started by trying to enable receiving so I can try to monitor DBUS and see what's going on. This failed and my operator (Elisa Finland) sent me an SMS stating that they can't send me the MMS configuration and I have to send an MMS first (According to Google translate's Finnish to English translation).

I then decided to try implementing sending.

I needed a custom MMS encoder so I can build my MMS. I also discovered that I know nothing about these things and started working on an MMS encoder/decoder.

I used a sample MMS, enjected my number and kept trying.

After long hours of working, I managed to hear my N95 vibrating and it was it :-D

This is just a proof of concept. Sending works. I need to figure out how to receive the wap push notification and how to bring up the GPRS connection in a clean way.

I'll post detailed instructions and the code I used when I get some sleep ;-)

Here's the HTTP headers sent:

Content-Type: application/vnd.wap.mms-message
User-Agent: NokiaN95_8GB/31.0.015; Series60/3.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
x-wap-profile: http://nds1.nds.nokia.com/uaprof/NN95_8GB-1r100.xml
Accept: */*, application/vnd.wap.mms-message, application/vnd.wap.sic
Accept-Charset: utf-8\r\nAccept-Language: en

Ah, and I didn't yet parse the reply I've received from elisa's server ;-)

Finally, a nice screenshot of my terminal:

My old Geocities website

Submitted by msameer on Mon, 26/10/2009 - 9:31pm

It'll disappear any moment soon... May you rest in peace :|


Submitted by msameer on Sun, 16/08/2009 - 11:02am

Erm, Never thought this would happen to me. It happened 9 days ago!

Bye fglrx...

Submitted by msameer on Thu, 09/04/2009 - 7:59pm

Thanks to all the hard work by the fglrx packaging team, DRI, MESA, Xorg, Radeon,... etc people!

I've been using fglrx with my laptop since I've had it:

01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility X1400

And to the people behind the Debian packaging..
* xserver-xorg-video-radeon from testing.
* libdrm-intel1 and libdrm2 from unstable
* libgl1-mesa-dri and libgl1-mesa-glx from experimental

vader:~# apt-get --purge remove fglrx-driver fglrx-kernel-src fglrx-kernel-2.6.26-1-686 fglrx-sourceReading package lists... Done
Building dependency tree      
Reading state information... Done

The following packages will be REMOVED:
   fglrx-driver* (9-2-2)
   fglrx-kernel-2.6.26-1-686* (9-2-2+2.6.26-13)
   fglrx-kernel-src* (9-2-2)
   fglrx-source* (9-2-2)
0 upgraded, 0 newly installed, 4 to remove and 17 not upgraded.
After this operation, 38.8MB disk space will be freed.
Do you want to continue [Y/n]?

I probably lost the ability to suspend and resume but I don't usually do it with that laptop.

Now let's hope my lapop at work will be adapted easily too :)

UPDATE: Seems you lose OpenGL 2.0 if you use the free driver. If you are doing OpenGL stuff like me then you are in trouble ;-|