-
-
Notifications
You must be signed in to change notification settings - Fork 40
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
simple routes #13
Comments
about checking stream exists two times if we have url start with stream name http server can check stream exists before dispatch also can dispatch to vod handler with different logic if stream type is not livestream for this point let's talk in #12 what do you think for new routes? |
So instead of Or maybe just replacing it? To have it correctly scoped (one source -> multiple profiles) as
For HTTP it could work without problems.
I think, as adaptive bitrate streaming having each quality starting separately would not be sustainable. Consider you are watching something, and your quality drops.Your player instantly switches to a diferent quality but it takes some time, when it starts. You might see interruption while watching. That's why, I think, for ABR we should start all available qualities. More information from my different project (that does not start on demand): https://github.com/m1k1o/hls-restream/blob/82c9bea924b17787caacb2265241b198febefc77/profiles/abr_transcoding_hd.sh
With dash i am fine with Maybe Webrtc would need to have a html test page. Signaling could be done via websockets. Maybe I like the idea of having transcoding suffix as router for any media path we choose. So that we can implement Where
|
it's the same no? file can be named stream_hls720_chunknumber.ts. in 2 situations reverse proxy or go-transcode serves file directly. i don't have preference personnelly
good argument. but it is a lot of power for qualities i dont know how jellyfin or hls-vod-too do it i will check
yes that is the idea. but now i think for it, why not use GET parameters ?profile=some&output=some. Or maybe /profile?setting1=some&setting2=some. enables more settings without worry for what order in URL to use them. so URL is /stream/profile for routing, and every profile can have it settings without change route |
Right now we are not in control of segment names, they are decided by a profile. When we do it internally, then we can use own names and match segments to playlist properly.
Also this boils down to the control of manifest and segments. If you would append those parameters to manifest (for HLS) then they need to be passed down to each segment. Because, we could have multiple active configurations and they cannot collide. Another solution would be to return sessions. Meaning, we can have any URLs we want, they just return 302 to a different url with generated token for exactly chosen profile configuration and output type, and it will be served. What do you think about this approach? On the other side, maybe it would be menaingful to completly decouple transcoding from packaging. So that we have only one profles, that get bunch od ENV values as input (or maybe stdin video) and then pass just transcoded video to stdout. After that, would be different ffmpeg that would do packaging to HLS or DASH. That would mean, one additional process per stream, but give us more freedom and portability. And would remove duplicated code (profiles for HLS and HTTP). |
we can use convention. example always output to quality-number.ts, or other extension for other profile. for transcoding from not 0 chunk:
HLS uses master playlist for alternative video audio subtitles streams. i think manifest (master playlist) is global, all video manifests have same keyframe but different path like 720p_24.ts. Building media playlist is fast when keyframes is cached. like this no collision?
for internal use yes, we can use hash(settings) not quality for chunk name. but i dont think useful to expose for user
i think it good for different logic for packaging/transcoding yes. playlist cache can be warmed before go-transcode (or when it start) like i said in #12. if "warm cache" option is used, find all media files and start sequential packager profile for them, with transcode-go settings in env variables. we can provide default packager profile (extract keyframes, propose qualities default transcode profiles supports, propose alternative audio or subs with file.[locale].vtt or file.[locale].mp3 etc, generate master/media playlist for all). (if we use keyframes direct from source packager profile doesnt need know settings, because it has keyframes from source for chunk count for playlist, and audio can be cut every place not like video, but if like hls vod we force keyframes min 2.25s max 4.50 (example) so packager profile needs this setting) of course for live streams playlist is dynamic so for live stream one process ffmpeg (transcode profile) is good. one limit is support for alternate sources for audio, for example translation during conference. in this situation you also need separate process for package and transcode
not for other formats, yes? edit: if packager profile caches more just keyframes, like also audio/video/sub tracks, then transcoder profile can receive settings. so if selected audio/sub is from video then it can extract during transcode, but if it's outside of video (external .mp3/.srt) packager profile can transcode for futur use (or not). but im not sure audio/sub extraction will work real time (maybe vtt/aac file is generated at end of transcode like m3u8 playlist) |
test is reserved stream name, we can use "/.route" if we need more static routes (no suggestion here) it will not match regex for streams
The text was updated successfully, but these errors were encountered: