Private:almohammadi

From NMSL
Revision as of 16:49, 8 June 2010 by Balmoham (talk | contribs)

Summary of accomplishments by Bassam Almohammadi.

June 8, 2010

  • faced a challenge in receiving packets with IP headers included. As far as I know there are two ways of doing this:
    • using libpcap library.
    • using RAW SOCKETs.
  • I have implemented a StreamReader from scratch using raw sockets without depending on libpcap library.
  • The basic function of my current StreamReader class: it listens for any incoming UDP packets on the local interface from a particular IP address and port number. The IP and Port are given as an input for the class. The output of this read function is returned in a buffer that contains packets received from the predetermined address and port.
  • I tested my program by streaming video from VLC destained to my client's IP address. I was able to capture the stream packets and save them in the buffer.
  • Every instance of my class shall handle different requests for different streams. I will handle multiple requests by multithreading. It is still not clear to me though when to terminate each thread? and whether it should continue listening for incoming stream from source until terminated by a user request.
  • I still have to test my class by receiving from multicast stream to see if I have to handle this differently.

TODO:

  • integration: add my reader class to the repository and integrate it with the burst class.
  • write about DarwinSS installation and configuration in the wiki.
  • update the design for the StreamReader class.

31 May 2010

  • Tried implementing streaming clients using different libraries mentioned below.
  • The most advance and used library is LIVE555, and I was able to write a program that receives a unicast stream from the server and saves the payload in a buffer. My only concern about this library is complexity of debugging for any future reason.
  • The RTSP session was created easily but faced some problems with firewall blocking UDP packets flow. I think this issue can be ignored for now. I tested the program successfully on a local machine and between two remote machines.
  • In case of RTP only, I implemented a client that uses ccRTP GNU library to download RTP packets from the server. ccRTP is a solid implementation and very easy to use. However, it depends on many other GNU libraries and therefore it requires long installation procedures in case those libraries were absent or obsolete. On the other hand, it provides reliability and high performance.
  • Looked up how to perform multiple streaming instances of the RTPreader through multithreading.
  • Now I am revising our initial MTV code in order to understand how to handle the arguments and deal with the buffer.
  • after a quick review, I think we don't have to implement RTSP over RTP at this level, based on the current implementation of MTV, which takes the whole IP packet including UDP and RTP headers. However, there is a comment left in the Burst class saying that eventually we shall store only the media data in the buffer (i.e. RTP payload) as I understand.
  • TODO: Test multiple streams and multithreading. Test the compliance of the buffer to BurstReader class processing requirement.

24 May 2010

  • Found many libraries for RTP (RFC 3550) / RTSP (RFC 2326):
    • LIVE555 Streaming Media -- C++, RTP/RTCP, RTSP, SIP. [1].
    • oRTP -- C, RTP/RTCP. [2].
    • RTPlib -- C, RTP/RTCP. [3].
    • ccRTP -- C++, RTP/RTCP. [4].
    • JRTPLIB -- C++, RTP, RTCP. [5].

in addition to some other libraries, but those were the most commonly used in other projects. After exploring each library's code and documentation, I found that JRTPLIB is the best candidate due to its good documentation and simplicity of reuse.

  • Finished the draft implementation of a client program based on JRTPLIB documentation, still facing some problems in building the code in order to test it.

17 May 2010

  • Practicing C++ native on Eclipse CDT for Ubuntu.
  • Reading about QuickTime Streaming Server and Darwin Streaming Server. [6] [7] [8]
  • Reading about RTP and RTSP protocols. [9] [10]
  • Install and configure Darwin Streaming Server and explore the source code.
  • Test streaming successfully with some clients (QuickTime and VLC).
  • Looking at some open source streaming clients and trying to understand how they function. [11]