mediagoblin-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GMG-Devel] GSoC ‘17 wrap up - Multiple qualities of video


From: Vijeth T Aradhya
Subject: [GMG-Devel] GSoC ‘17 wrap up - Multiple qualities of video
Date: Fri, 25 Aug 2017 13:58:03 +0530

Hello,

I worked on extending the video player in GNU MediaGoblin to
accommodate multiple resolutions of a video. It has been a great
experience so far! I am extremely grateful to my mentors, Boris Bobrov
and Christopher Webber.

==========================================
Community Bonding Period (May 4, 2017 - May 29, 2017)
------------------------------------------------------------------------------------

As I was quite new to the technologies that were required for this
project, I spent most of my time getting used to Celery, Gstreamer and
VideoJS.

    (a) I built a sample project
(http://github.com/vijeth-aradhya/celery-priority-tasking) to get used
to scheduling jobs and prioritizing them using Celery. It was really
helpful for designing and implementing parallelism in transcoding
video into multiple resolutions.
    (b) I looked at some of the VideoJS plugins for rendering multiple
qualities of video.
    (c) We finalized the design changes for the backend (like shifting
to rabbitmq, etc).

=============================
Phase 1 (May 30, 2017 - June 26, 2017)
----------------------------------------------------------

The main design change is adding the workflow method to the Class
VideoProcessingManager. The Celery tasks are of two types: main_task
and complimentary_task. The video is transcoded to the default
resolution (which is set by the instance owner) in the main_task.
After completion of the main_task, the video is transcoded to the
other resolutions in different complimentary_tasks concurrently.

    Major commits:

    [16ef1164][1]       Modify CommonVideoProcessor to accommodate
multiple qualities
    [7cc9b6d1][2]      Add main_task, complimentary_task and cleanup
    [9a27fa60][3]       Add additional celery config settings
    [25ecdec9][4]      Add priority to the celery tasks
    [2771f467][5]       Add VideoProcessingManager.workflow() tests
    [ee2b53de][6]      Add test_chord for TestSubmissionVideo

Commits Link: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commits/multiple-qualities-backend

=============================
Phase 2 (June 27, 2017 - July 24, 2017)
----------------------------------------------------------

The major changes committed during this period are upgrading the
VideoJS player version to v5.20.1 and adding video-resolution-switcher
(v0.4.2), a VideoJS plugin. At this point, the video player could
change the resolution of the video.

    Major commits:

    [809ebf45][7]       Add get_all_media() in MediaEntryMixin
    [ca469bb0][8]      Add video-resolution-switcher (video.js plugin) v0.4.2
    [d66d08d1][9]      Change video.js version to v5.20.1
    [b57a682c][10]     Add change-video-resolution.js to start
video-resolution-switcher plugin
    [9dea49e6][11]     Modify video.html to add video-resolution-switcher plugin

Commits Link: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commits/multiple-qualities-frontend

==================================
Final Phase (July 25, 2017 - August 29, 2017)
--------------------------------------------------------------------

In this phase, I concentrated on perfecting the work that I had done.
I fixed small bugs, modified the logging and added more tests. I also
modified the processing panel to show the progress of transcoding the
video to the default resolution (previously, only the total progress
of video processing was shown). Hence, a migration to the MediaEntry
table was necessary.

    Major commits:

    [36c1e7dc][12]     Replace print statements to logging
    [3456abe9][13]     Fix percentage reporting
    [170cd28f][14]      Create a seperate test for get_all_media
    [beb9121c][15]     Add main_transcoding_progress column migration
    [b89e12a2][16]     Add main_transcoding_progress to ProgressCallback
    [e86e08ae][17]     Show default resolution progress in processing panel

Commits Link: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commits/transcoding_progress

===============
More features/ideas
------------------------------

I feel that I have successfully completed the proposed project, but
there is always scope for improvement. I have decided to stick around
with the MediaGoblin community even after GSoC so that I can continue
to improve the video plugin, contribute to other parts of the code and
help newcomers to start contributing in the future.

    (a) One of the features that is required is to show the real time
progress of processing of each of the resolutions. Currently, only the
total progress and the default resolution progress is shown in the
processing panel.
    (b) I think that there should be better error handling after we
shifted to workflow() from ProcessMedia.run(). Currently, we directly
schedule the Celery tasks by calling workflow() in submit/lib.py but
we previously scheduled them by calling ProcessMedia.run() in
processing/task.py.
    (c) When the user has low network connection and he/she is trying
to watch a video, then the player has to automatically switch to a
lower resolution of the video ([adaptive streaming discussion][18]).
MPEG DASH support might seem a bit too far-fetched right now, but it
is still a good addition to the player.

=============
Outstanding bugs
--------------------------

If there are any bugs/issues, then they will be listed in the [issue
tracker][19].


Sincerely,

Vijeth Tumkur Aradhya,
Undergraduate Junior,
International Institute of Information Technology, Hyderabad, India.



[1]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/16ef1164c15b13c20945890cbb5cc4a8e4e73852
[2]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/7cc9b6d1c7ab174485ddfbf8db63f14162e01d7b
[3]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/9a27fa60a42cd39596cb8c4bb0331279b998bae7
[4]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/25ecdec9971394064063db397232eb7f0e89fae3#fa6a3c609f1049956dc7661241db878d1c3a4f1d_530_535
[5]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/2771f4678a483665cb33fe414b50b445f7df07c8
[6]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/ee2b53dea1a4898c918c2bebbdcbc4edc614ae0b
[7]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/809ebf4536ed652325013d1a78e2239849e85cd5
[8]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/ca469bb08bb73c3f2e56a0e893af7e6cc4859f95
[9]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/d66d08d17c8b960d2dc6cd20780f5d050c55119f
[10]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/b57a682cd471d6830e63fffaa28ca00310019c7f
[11]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/9dea49e66332b0cf55c6d8ff929db5016da8721f
[12]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/36c1e7dc2f3c63021458c8d36fe3c291be0131bf
[13]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/3456abe90196d5894fc5f8aa0383d02b894b1f2d
[14]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/170cd28f9e738649ce9cb7856b39f7148da39106
[15]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/beb9121c0d0d86a575f3501e6070bf4f63956727
[16]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/b89e12a23e55e0a1a4750e3107b114f27a0f0382
[17]: 
https://gitlab.com/vijeth-aradhya/mediagoblin/commit/e86e08ae741e03ff6949f9cda091318331a660bb
[18]: 
https://gist.github.com/vijeth-aradhya/30f392c9b7b694eeb539656de90f2aab#with-adaptive-streaming
[19]: https://gitlab.com/vijeth-aradhya/mediagoblin/issues


reply via email to

[Prev in Thread] Current Thread [Next in Thread]