Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Live stream with subtitles (WebVTT) #685

Closed
pyahmed opened this issue Nov 29, 2019 · 4 comments · Fixed by #1349
Closed

Live stream with subtitles (WebVTT) #685

pyahmed opened this issue Nov 29, 2019 · 4 comments · Fixed by #1349
Labels
status: archived Archived and locked; will not be updated type: enhancement New feature or request

Comments

@pyahmed
Copy link

pyahmed commented Nov 29, 2019

System info

Operating System: macOS Mojave 10.14.6
Shaka Packager Version: 2.3.0

Issue and steps to reproduce the problem

Source is UDP live stream, I intend to inject live subtitles. All subtitles present in the source vtt (timed into the future) show up correctly in the player. If I want to add a new subtitle I add it to the source vtt file and save it. Even if the cue is in the future, it will be ignored by packager and not show up in the stream. So far nothing new, so I read through #380 and produced a python script that adds empty cues with 100ms duration (continuously), then once in a while a real cue with text is added. Again nothing shows up.

Packager Command:
packager-osx 'in=udp://192.168.0.239:40000,skip_encryption=1,stream=video,segment_template=z_video_$Number$.ts,playlist_name=z_h264.m3u8' 'in=input_text.vtt,stream=text,segment_template=z_text_$Number$.vtt,playlist_name=z_text.m3u8,hls_group_id=text,hls_name=de' --hls_master_playlist_output z_h264_master.m3u --hls_playlist_type LIVE

What is the expected result?
Subtitles should be visible in the output.

What happens instead?
Subtitles are not visible in the output.

Has there been any progress on this, is there any alternative way to get 'dynamically' growing vtt files as source to work? Or other way to get live subtitles injected?

@kqyang
Copy link
Contributor

kqyang commented Dec 2, 2019

There are a few changes @jakubvojacek did to make it work. @jakubvojacek are you interested in sending a pull request to merge your changes to master? It can be put under a configurable flag.

@kqyang kqyang added type: enhancement New feature or request and removed needs triage labels Dec 2, 2019
@shaka-bot shaka-bot added this to the Backlog milestone Dec 2, 2019
@jakubvojacek
Copy link

Hello,

we didn't do anything on the packager side apart from what is listed and described by you in #380.

The main issues we're still fighting with, are in packager - like that it needs the secondish heartbeats, single timing issue in input can break the whole packaging process (one timestamp that is much more in future for whatever reason - it should disregard subs (or put to queue of some kinds) that are far in the future compared to the video etc).

Thank you
Jakub

@pyahmed
Copy link
Author

pyahmed commented Dec 18, 2019

So essentially at the moment there is no way to make live subtitles work in any reliable way (DASH or HLS)?

@Canta
Copy link
Contributor

Canta commented Feb 3, 2022

Hi everyone.

I did successfully modified shaka packager in order to be able to read webvtt input from an UDP stream.
In order for this to work, there are two modifications needed:

  1. Shaka packager is currently too strict (in my opinion) with the webvtt parsing: if it doesn't find the WEBVTT header, it throws an error and the process ends there. I've changed that error condition to a warning condition, so the process can continue even without the header. This is key for live streams, as a constant stream of webvtt may only include the header just at the beginning, and shaka packager can be instanced any time (not in sync with webvtt's beginning) thus missing the header (even when the content is totally fine).

  2. That thing with the header was important in order to auto-detect input format. But that is a problem only if you actually want to auto-detect the input format, and I don't want to do such thing: I want to be able to explicitly tell shaka packager "this stream has content in X format". So, for that, I added a input_format stream parameter, which give the ability to set explicitly the input format, and so the auto-detection does not triggers.

With ""webvtt" as explicit input format (no auto-detection), and changing the header check from error to warning (no process ending), shaka packager works fine with an UDP live webvtt text as input.

I plan to prepare a PR tomorrow bringing those changes. In the meantime, I let this comment here to wake up the issue and give some context for the future PR.

joeyparrish pushed a commit that referenced this issue Feb 24, 2024
An updated version of PR #1027

That previous PR was done using 2021 code, and there were many changes
in the codebase from there, so a rebase was needed and also some minor
tweak here and there. But it's the same code, just reimplemented on a
newer codebase.

If you want to take a look at this in action, after building shaka
packager with this PR's code included, try this commands in 3 different
simultaneous bash sessions:

1. Video UDP input: `ffmpeg -f lavfi -re -i
"testsrc=s=320x240:r=30,format=yuv420p" -c:v h264 -sc_threshold 0 -g 30
-keyint_min 30 -r 30 -a53cc 1 -b:v 150k -preset ultrafast -r 30 -f
mpegts "udp://127.0.0.1:10000?pkt_size=1316"`
2. WebVTT UDP input: `for sec in $(seq 0 9999) ; do printf
"%02d:%02d.000 --> %02d:%02d.000\ntest second ${sec}\n\n" "$(( ${sec} /
60 ))" "$(( ${sec} % 60 ))" "$(( (${sec} + 1) / 60 ))" "$(( (${sec} + 1)
% 60 ))" ; sleep 1 ; done > /dev/udp/127.0.0.1/12345`
3. shaka packager command line: `timeout 60
path/to/build/packager/packager
'in=udp://127.0.0.1:10000?timeout=8000000,stream_selector=0,init_segment=240_init.m4s,segment_template=240_$Number%09d$.m4s,bandwidth=150000'
'in=udp://127.0.0.1:12345?timeout=8000000,stream_selector=0,input_format=webvtt,format=webvtt+mp4,init_segment=text_init.m4s,segment_template=text_$Number%09d$.m4s,language=eng,dash_roles=subtitle'
--mpd_output ./manifest.mpd --segment_duration 3.2
--suggested_presentation_delay 3.2 --min_buffer_time 3.2
--minimum_update_period 3.2 --time_shift_buffer_depth 60
--preserved_segments_outside_live_window 1 --default_language=eng
--dump_stream_info 2>&1`

Note the added `input_format=webvtt` to the shaka packager command's
second selector. That's new from this PR. If you don't use that, shaka's
format autodetection will not detect the webvtt format from the input,
as explained in
#685 (comment).
Try the command without it if you want to.

Fixes #685
Fixes #1017

---------

Co-authored-by: Daniel Cantarín <canta@canta.com.ar>
@github-actions github-actions bot added the status: archived Archived and locked; will not be updated label Apr 24, 2024
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 24, 2024
@cosmin cosmin removed this from the Backlog milestone May 12, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
status: archived Archived and locked; will not be updated type: enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants