-
Notifications
You must be signed in to change notification settings - Fork 6k
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
Change video track (Quality) on HLS stream #676
Comments
Full multi-track support should make this easier, because once we have that it should be relatively easy to have the video renderer advertise multiple tracks, like: AUTO,1080,720,480 (or whatever). YouTube use DASH, where track selection is supported (albeit not in a particularly easy way) using MultiTrackChunkSource. SmoothStreaming playbacks can also make use of MultiTrackChunkSource. Once we have proper multi-track support this class will probably go away. |
+1 |
Currently I post a message into HlsChunkSource and change two things: adaptiveMode = ADAPTIVE_MODE.NONE;
selectedVariantIndex = index; |
Can you provide more details on this? |
Any development news or plans for this issue? |
Looking forward to this feature. |
This is equivalent to DashTrackSelector and SmoothStreamingTrackSelector. This is a step toward allowing HlsChunkSource to expose multiple tracks, which is a requirement for supporting WebVtt. This change also enables WebVtt extractor instantiation. Issue: #151 Issue: #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=111698833
There are multiple issues with HlsSampleSource's use of LoadControl that become apparent when you attempt to use the same LoadControl for loads by another source. * In the "limbo" state HlsSampleSource doesn't start any new loads, but doesn't update the LoadControl to tell it that it doesn't want to load anything either. This can prevent another source from starting the loads that it needs to make to complete preparation, causing playback to become stuck. * The LoadControl isn't updated properly when the EOS is reached. This can cause playback to become stuck near the end of the media. * If HlsSampleSource is released from being in the "limbo" state, it doesn't unregister itself with the control. Issue: #151 Issue: #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=111942009
Issue: #151 Issue: #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=111945466
See the documentation of buildTracks for the gory details. Issue: #151 Issue: #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=112149293
It's now possible to select between the available variants in ExoPlayer. The demo app will also list the available variants and allows selection between them (during playback tap the screen and press the "Video" button to see the available variants, or the "Audio" button if your playing audio only). |
Note that this is on the dev branch (and will make it into the next release). |
Can't wait to try all of them! Thanks! |
How to seamless switch? @ojw28 |
We support adaptive mode where we'll seamlessly switch based on the available bandwidth, and we now also support manual selection. We do not support seamless manual selection. |
I tried the demo with some
|
Thanks for your observations.
|
This makes sense until we need to support seeking in the live window. Issue: #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=112402026
There's a separate issue tracking switching in Live (#1174), so let's use that for tracking. |
When a seek is performed, renderers currently perform the actions that they need to take in two places: Some changes are performed in seekTo implementations. Other changes are performed when discontinuities are read from the source. In HLS we need to perform what is effectively a seek originating in the source. To support this, this CL allows discontinuities read from the source to modify the playback position. All actions that renderers perform as a result of a seek are moved to be performed when a discontinuity is received. Best way to understand CL: - Look at SampleSource interface change and then at the concrete implementations, to make sure they've been changed properly. - Look at SampleSourceTrackRenderer change. - Look at concrete renderers. The general pattern is that code previously performed in seekTo and READ_DISCONTINUITY is merged into onDiscontinuity(). Note: This will be further untangled in V2. Issue #676 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=112720746
Hello @ojw28 |
No immediate plans, no. |
In ExoPlayer V2, when it's done, HLS will use a |
@ojw28 any idea when we can expect to be able to use |
@ojw28 : is there any ways in v2 to implement this on HLS? I didn't see FormatEvaluator anymore. |
All track selection is converged into TrackSelector and TrackSelection in V2, and works in the same way for DASH, SmoothStreaming and HLS. The demo app allows you to select from the available streams in all cases. I suggest you take a look at the trackselection package if you're interested in the internal details. |
@ojw28 : Thanks for response! I saw
in my setting as the same value in
my player run with adaptive bitrate and played with highest bitrate in fast internet connection.
Thanks! |
You're doing the right thing. There's a known issue specifically for HLS where the initial selection isn't being applied correctly. This is tracked by #2353. |
@ojw28 Thank you so much! You guys are doing great ExoPlayer. |
When playing HLS streams (like twitch live streams), the player will adopt the the best possible quality, as expected. But I would like to be able to let the users select from available qualities, like in the YouTube app. (If the users don't need the best possible quality and/or have a limited data plans)
But I can't find any way to actually set the video quality manually.
How does the YouTube app accomplice this?
Will the "Steps toward full multi-track support."-commit to the dev-branch be of any use for this kind of functionality?
The text was updated successfully, but these errors were encountered: