GNOME Bugzilla – Bug 785120
playbin3: Supporting subtitle only input is unstable
Last modified: 2017-07-19 15:15:27 UTC
DASH + subtitle playback using playbin3 has multiple issues. - Too early unblocking of decodebin3 srcpad depending on collection arrival time. ==> Assume the mpd has A/V/T streams. If the collection of video arrives before Text, is ok. But if Text came first and then Audio does (not yet video), playbin3 unblock and link them without video. Current playsink doesn't support text only sink. - Unexpected DecodebinInputStream removal. ==> Before configuration of A/V input, Text input can be configured with EOS. Then, when A/V is configured, it removes the Text's streams. We shouldn't remove other parsebin's input. - Premature GstStream object is exposed.
I tested using following stream on playbin3. http://dash.edgesuite.net/akamai/test/caption_test/ElephantsDream/elephants_dream_480p_heaac5_1.mpd
Created attachment 355933 [details] [review] playbin3: Delay linking text output until video stream is shown We are not sure that which stream's collection arrives first when there are multiple parsebins such as adaptive streaming.
Created attachment 355934 [details] [review] parsebin: Ensure StreamType and Caps of GstStream object before exposing it The final StreamType and Caps might not be set yet on GstStream at exposing the pads.
Created attachment 355935 [details] [review] decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin Do not remove other parsebin's input streams. It will cause unexpected removal of any input streams in multi-parsebin use case. Basically, the purpose of blocking buffers is similar to checking no-more-pads of chain/group. That is, it gives hint to know the timing to remove old (EOSed) streams of the parsebin and to add/reuse slots for new input streams. But, that doesn't mean that we need to remove other parsebin's EOSed stream. Each parsebin has most likely its own streaming thread and therefore EOSed time can be much different. (i.e., much early EOS of subtitle only parsebin)
Thanks ! commit bf32c0b3b00b7f60d9ea9afd078be9cb090d9eb7 (HEAD -> master, origin/master, origin/HEAD) Author: Seungha Yang <sh.yang@lge.com> Date: Wed Jul 19 19:58:28 2017 +0900 decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin Do not remove other parsebin's input streams. It will cause unexpected removal of any input streams in multi-parsebin use case. Basically, the purpose of blocking buffers is similar to checking no-more-pads of chain/group. That is, it gives hint to know the timing to remove old (EOSed) streams of the parsebin and to add/reuse slots for new input streams. But, that doesn't mean that we need to remove other parsebin's EOSed stream. Each parsebin has most likely its own streaming thread and therefore EOSed time can be much different. (i.e., much early EOS of subtitle only parsebin) https://bugzilla.gnome.org/show_bug.cgi?id=785120 commit abe1183c1704a284983bb0cfe4d5132dbdc5ed3a Author: Seungha Yang <sh.yang@lge.com> Date: Wed Jul 19 18:47:29 2017 +0900 parsebin: Ensure StreamType and Caps of GstStream object before exposing it The final StreamType and Caps might not be set yet on GstStream at exposing the pads. https://bugzilla.gnome.org/show_bug.cgi?id=785120 commit 7a236e23022b26b3afc1eb4f718dc4978c34a747 Author: Seungha Yang <sh.yang@lge.com> Date: Wed Jul 19 13:39:52 2017 +0900 playbin3: Delay linking text output until video stream is shown We are not sure that which stream's collection arrives first when there are multiple parsebins such as adaptive streaming. https://bugzilla.gnome.org/show_bug.cgi?id=785120