2020-03-29, 20:57
(Alternate Google Doc Link)
Mohd Tahir
Github: tahirdon
Forum/e-mail: [email protected]
Skype: tahirdgreat
Phone Number: +91 7985059250
Town, country: Roorkee, India
Project idea: Bitrate switch for inputstream.adaptive binary addon for Kodi
SUMMARY AND PROJECT FOCUS
Inputstream.adaptive is written in C++ and handles 3 bitstreams:
While streaming, currently there is no inbuilt feature to switch bitstream automatically when external factors like network available bandwidth, screen window/ resolution changes for a minimum time, frames are not able to be rendered properly due to computation limitation. So, my focus of work will be mostly in this area to automatically switch the streaming to higher/lower resolutions depending on external factors/parameters available. Also I will be trying to implement playback speed/ frame dropping.
MOTIVATION
Previously I have worked in research projects ranging from image processing, FPGA MIPI-CSI2 to HDMI protocol interfacing for video, Electrical Vehicle Control and DAQ programming, embedded system driver interface, etc. Most of them were C/ C++ based.
I have previously interned in Samsung R&D in the field of sensor fusion algorithms for navigation on Android.
But I have never worked on open-source projects. One of my friend suggested it to begin with GSoC as his experience was very fruitful and he now a regular open-source contributor.
I regularly do C++ competitive programming and am very versed with STL and OOPs, so I thought it would be good to begin with open-source with C++. Also I had inclination towards video streaming, and thus I found inputstream.adaptive binary add-on for Kodi the best contender to begin.
Till now I got to learn a lot of stuff about adaptive streaming and the Slack community is also very responsive and amazing to begin with. Mostly I devoted time to understand the codebase of inputstream.adaptive and compiling Kodi myself and playing with Kodi tree by tweaking changes to understand the build flow. I recently had shifted to Linux, so while compiling, I also got a good understanding with Linux. I also faced CMake first time and now have a good understanding now. I would be looking to consistently work upon it.
GOALS
I have segmented the work roughly as 2 week targets.
Proposed Timeline:
01 June- 14 June
15 June- 2 July
03 July (PHASE 1 EVALUATION)
04 July- 19 July
20 July - 30 July
31 July (PHASE 2 EVALUATION)
01 August- 14 August
17 August- 31 August
24 August- 31 August (FINAL SUBMISSION)
WHAT DOES IT TOUCH IN KODI
The work will be at inputstream.adaptive repository. Most of the work will be revolving around AdaptiveStream and AdaptiveTree classes, main function.
REQUIREMENTS
AVAILABILITY
In the upcoming months, I am completely free due to nationwide shutdowns. Also as this is my first org in terms of open-source contribution, I will be completely devoting my time working towards it.
I can easily give 40-50 hours a week till my college reopens. I intend to complete most of the work before my college reopens. Probably my college will reopen in August, then also I will be able to devote 30-40 hours a week. On Saturdays and Sundays there is no college and on Wednesdays I have only 2 hour session.
Also I usually devote 3 hours bi-weekly, for an NGO to distribute food for needy in the wake of Covid-19.
Apart from above, I have no other commitments / vacations planned for the summers.
Also I do not have any internships this summer.
POSSIBLE MENTORS
Mohd Tahir
Github: tahirdon
Forum/e-mail: [email protected]
Skype: tahirdgreat
Phone Number: +91 7985059250
Town, country: Roorkee, India
Project idea: Bitrate switch for inputstream.adaptive binary addon for Kodi
SUMMARY AND PROJECT FOCUS
Inputstream.adaptive is written in C++ and handles 3 bitstreams:
- HTTP Live Streaming (HLS)
- Dynamic Adaptive Streaming over HTTP (DASH)
- Smooth Streaming (ISM)
While streaming, currently there is no inbuilt feature to switch bitstream automatically when external factors like network available bandwidth, screen window/ resolution changes for a minimum time, frames are not able to be rendered properly due to computation limitation. So, my focus of work will be mostly in this area to automatically switch the streaming to higher/lower resolutions depending on external factors/parameters available. Also I will be trying to implement playback speed/ frame dropping.
MOTIVATION
Previously I have worked in research projects ranging from image processing, FPGA MIPI-CSI2 to HDMI protocol interfacing for video, Electrical Vehicle Control and DAQ programming, embedded system driver interface, etc. Most of them were C/ C++ based.
I have previously interned in Samsung R&D in the field of sensor fusion algorithms for navigation on Android.
But I have never worked on open-source projects. One of my friend suggested it to begin with GSoC as his experience was very fruitful and he now a regular open-source contributor.
I regularly do C++ competitive programming and am very versed with STL and OOPs, so I thought it would be good to begin with open-source with C++. Also I had inclination towards video streaming, and thus I found inputstream.adaptive binary add-on for Kodi the best contender to begin.
Till now I got to learn a lot of stuff about adaptive streaming and the Slack community is also very responsive and amazing to begin with. Mostly I devoted time to understand the codebase of inputstream.adaptive and compiling Kodi myself and playing with Kodi tree by tweaking changes to understand the build flow. I recently had shifted to Linux, so while compiling, I also got a good understanding with Linux. I also faced CMake first time and now have a good understanding now. I would be looking to consistently work upon it.
GOALS
I have segmented the work roughly as 2 week targets.
Proposed Timeline:
01 June- 14 June
- Work on implementing a functionality to maintain buffer health in AdaptiveStream file.
- A default buffer length will be set initially.
- A separate method function will be made in AdaptiveStream that will load the next segments from AdaptiveTree in a thread and will maintain a buffer health depending upon the constraints.
- Number of segments will depend on the format as single segment size depends on formats (mpd, ism, hls).
15 June- 2 July
- User UI input option for the buffer length duration to be made.
- Implementation of best algorithm/logic to select best stream for smoothness depending on available network speed record and maintained buffer health.
03 July (PHASE 1 EVALUATION)
04 July- 19 July
- Work on implementation of stream selection when player window size is changed for a sufficient time.
- Logic would be to periodically scan Kodi internal video player window size and then if the video resolution doesn’t match the window resolution(say for 10 seconds), it will switch.
20 July - 30 July
- Work on implementation of stream selection logic when computation power is getting limited.
- 2 parameters will be acquired from Kodi- CPU usage, memory usage. And according to it, toggling of the stream will happen.
31 July (PHASE 2 EVALUATION)
01 August- 14 August
- Start working on playback speed/ frame dropping.
- Add option to reduce playback speed say 0.97x, if network speed is low or CPU load is high.
- Also work out on possibility of dropping some frames.
17 August- 31 August
- Complete/tune all the above logic and build options so that user can configure priority of the above options.
24 August- 31 August (FINAL SUBMISSION)
- Polish all the code.
- Complete Documentation
WHAT DOES IT TOUCH IN KODI
The work will be at inputstream.adaptive repository. Most of the work will be revolving around AdaptiveStream and AdaptiveTree classes, main function.
REQUIREMENTS
- C++
- OOPs
- CMake
- Understanding of video streaming
- Familiarity with GIT
AVAILABILITY
In the upcoming months, I am completely free due to nationwide shutdowns. Also as this is my first org in terms of open-source contribution, I will be completely devoting my time working towards it.
I can easily give 40-50 hours a week till my college reopens. I intend to complete most of the work before my college reopens. Probably my college will reopen in August, then also I will be able to devote 30-40 hours a week. On Saturdays and Sundays there is no college and on Wednesdays I have only 2 hour session.
Also I usually devote 3 hours bi-weekly, for an NGO to distribute food for needy in the wake of Covid-19.
Apart from above, I have no other commitments / vacations planned for the summers.
Also I do not have any internships this summer.
POSSIBLE MENTORS
- peak3d