当前位置: 首页 > 知识库问答 >
问题:

更改外挂机HLS质量

傅俊德
2023-03-14

我正试图在ExoPlayer中设置视频比特率。我已经这样设置了:

trackSelector = new DefaultTrackSelector(factory);
DefaultTrackSelector.Parameters parameters = trackSelector.getParameters();
parameters.withMaxVideoBitrate(maxBitrate);
parameters.withExceedRendererCapabilitiesIfNecessary(false);
parameters.withExceedVideoConstraintsIfNecessary(false);
trackSelector.setParameters(parameters);

但不管用。在我发现的任何地方,我都发现人们在使用HlsChunk源代码,这在ExoPlayer2.6中是私有的。有人能帮我吗?

共有1个答案

充小云
2023-03-14
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(Objects.requireNonNull(getContext()),
                Util.getUserAgent(this.getContext(), getResources().getString(R.string.app_name)));
trackSelector = new CustomTrackSelector();
            videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mp4VideoUri);
    player = ExoPlayerFactory.newSimpleInstance(this.getContext(), trackSelector);
public class CustomTrackSelector extends DefaultTrackSelector
{
    public CustomTrackSelector()
    {
        super();
    }
    protected @Nullable
    TrackSelection selectVideoTrack(
            TrackGroupArray groups,
            int[][] formatSupports,
            int mixedMimeTypeAdaptationSupports,
            Parameters params,
            @Nullable TrackSelection.Factory adaptiveTrackSelectionFactory)
            throws ExoPlaybackException
    {
        AdaptiveTrackSelection adaptiveTrackSelection = null;
        if (groups.length > 0)
        {
            for (int groupIndex = 0; groupIndex < groups.length; groupIndex++)
            {
                TrackGroup trackGroup = groups.get(groupIndex);
                int[] tracks = new int[trackGroup.length];
                //creation of indexes array
                for (int i = 0; i < trackGroup.length; i++)
                {
                    tracks[i] = i;
                }

                adaptiveTrackSelection = new AdaptiveTrackSelection(
                        trackGroup,
                        tracks,
                        new DefaultBandwidthMeter(),
                        AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
                        AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
                        AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
                        AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
                        AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
                        AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
                        Clock.DEFAULT);

                for (int i = 0; i < tracks.length; i++)
                {
                    Format format = trackGroup.getFormat(tracks[i]);
                    if (format.width < MIN_WIDTH)
                    {
                        Logger.log(this, "Video track blacklisted with width = " + format.width);
                        adaptiveTrackSelection.blacklist(tracks[i], BLACKLIST_DURATION);
                    } else
                    {
                        Logger.log(this, "Video track NOT blacklisted with width = " + format.width);
                    }
                }
            }
        }

        return adaptiveTrackSelection;
    }
}

上面的方法只是将你不想选择的曲目列入黑名单,允许玩家在那些没有列入黑名单的曲目之间进行选择。

我们有黑名单的轨道根据宽度参数,但显然你可以过滤他们使用比特率。

通过这种行为,玩家将开始使用你允许它使用的轨道,在一段时间后(黑名单时间),它可以切换回使用所有的轨道在需要的情况下。如果希望始终排除一个音轨,只需使用integer.max_value作为黑名单时间。

 类似资料:
  • //这里应该去什么?

  • 我对ExoPlayer没有什么问题。当我尝试播放hls流的视频时,几乎一切都很好。hls流包含3组不同的块列表,每个块列表用于不同的带宽。 但是hls自适应流不起作用,播放器只能与一个块列表一起工作,对于慢速的互联网连接,这个解决方案是不可用的。 我也尝试实现MediaSourceEventListener,并且onDownstreamFormatChanged只在播放器初始化时调用一次。 谢谢你

  • 这里是代码沙箱https://codesandbox.io/s/wild-brook-jpeio?file=/src/App.js 我使用useEffect钩子获取一个值数组。数组变量是使用useState钩子设置的 本机选择的值和onChange属性还使用另一个状态变量及其设置函数来更新它。 使用下面的代码部分,使用set函数设置在使用效果获取数据之后本机选择的选定值。 但这会导致太多的渲染错误

  • 还在回家的路上,绝影就发短信把辞职的事情告诉了大爷,原以为大爷在四川等自己辞职等了这么久,收到消息肯定欣喜若狂。但事情往往就是这样,你没有女朋友的时候想有个女朋友,但当你费尽千辛万苦台词排练了几百遍终于半骗半哄有了一个女朋友的时候,你才发现有个女朋友也不过就是那个样子,甚至有时候还不如一个人单身过。 大爷还是用那副面孔对着绝影:“辞了?” “辞了。那天谈判,我第一句话就是‘陈董,我决定离开公司’。

  • 问题内容: 我有以下代码,该代码创建灰度BufferedImage,然后设置每个像素的随机颜色。 在大约25%到30%的像素中会发生奇怪的行为,我在其中设置颜色,然后立即设置颜色,使其与之前设置的值不同。我是否以错误的方式设置颜色? 问题答案: 这是您的解决方案:禁止getRGB并使用Raster(比getRGB更快,更容易)或更好的DataBuffer(最快,但必须处理编码): 在您的情况下,g