Media Server implementing Modern HTTP MPEG-DASH and HLS protocols
The goal of the project is to implement a Media server compatible with both MPEG Dynamic Adaptive Streaming over HTTP ( DASH) and HTTP Live streaming(HLS).
The following is our step-by-step plan:
For both the methods the common structure for the Media server/client is :
-
Segment the media or streaming buffer to make a playlist using ffmpeg[3] ( Handle audio and video stream appropriately).
-
Add appropriate signature and track information and append the parsable format as mentioned in RFC [1] for HLS and RFC [2] for DASH.
-
Encode and encrypt the segments (END-to-END) and send securely over HTTP.
-
Decrpyt the segments upon receiving them ( Handle audio and video stream appropriately).
-
Parse the receiving segments and use header information to recreate the proper sequence.
-
Decode the sequence and recreate the playlist.
-
Read from the buffer and stream it using openCV [4].
-
Also implement protocol specific logging, adaptive features etc.
-
Evaluate performance metrics to decide which method is better with respect to which parameters.
Siddhartha Mishra
-
DASH : Implementation of the segmentation, encryption and specific features and working prototype as mentioned in RFC.
-
Client side : Parsing segment and decoding them to recreate playlists on client side.
Raaghav R.
-
HLS : Implementation of the segmentation, encryption and specific features and working prototype as mentioned in RFC.
-
Client side : Render streaming buffer as received in order on display using OpenCV.
-
Implementation of MPEG-DASH and HLS protocol and a working prototype of the Media server and client.
-
Performance comparison using visualizable graphs for both protocols based on the following parameters:
-
Streaming performance : Startup delay, jitter, latency, re buffer duration etc.
-
Video Quality : Resolution , packets lossed , Bit rate, frame rate etc.
-
[1] https://tools.ietf.org/html/rfc8216( RFC for HLS)
[2] https://tools.ietf.org/html/rfc6983 (RFC for MPEG-DASH)
[3] https://ffmpeg.org Used to create ffmpeg segments of a continuous stream using a c ommon encoder so that it can be decoded properly on the client side.
[4] https://opencv.org To render video on client side stream from received buffers over network from media server.