Exoplayer多视频切换和HLS多码率手动切换

2024-05-11 06:18

本文主要是介绍Exoplayer多视频切换和HLS多码率手动切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多视频切换说白点就是上一集下一集功能,在网上找了一下发现几篇都是要改源代码的,这么强大的播放器怎么会没有这个功能呢,就换了关键字找,最后找到别人说可以用ConcatenatingMediaSource实现,然后又找具体代码,最后在GitHub里找到例子AesExoPlayer,后来翻了下Exoplayer的demo代码发现也有怎么用ConcatenatingMediaSource的,就是不太明显castdemo

贴代码吧

初始化播放器

private SimpleExoPlayer player;private Timeline.Window window;private Handler handler;private void initPlayer(){handler = new Handler();DefaultTrackSelector trackSelector = new DefaultTrackSelector();player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this, "ExoPlayer"));String[] s = {"xxxxxx.mp4","xxxxxx.mp4"};MediaSource[] videoSources = new MediaSource[s.length];for (int i = 0; i < s.length;i++){Uri u = Uri.parse(s[i]);videoSources[i] = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(u, handler, null);}ConcatenatingMediaSource concatenatedSource =new ConcatenatingMediaSource(videoSources);player.prepare(concatenatedSource);window = new Timeline.Window();}

上一集

private void previous() {Timeline timeline = player.getCurrentTimeline();if (timeline.isEmpty()) {return;}int windowIndex = player.getCurrentWindowIndex();timeline.getWindow(windowIndex, window);int previousWindowIndex = timeline.getPreviousWindowIndex(windowIndex, player.getRepeatMode(),false);if (previousWindowIndex != C.INDEX_UNSET) {player.seekTo(previousWindowIndex, C.TIME_UNSET);} else {Log.d("================","第一集");}}

下一集

private void next() {Timeline timeline = player.getCurrentTimeline();if (timeline.isEmpty()) {return;}int windowIndex = player.getCurrentWindowIndex();int nextWindowIndex = timeline.getNextWindowIndex(windowIndex, player.getRepeatMode(),false);if (nextWindowIndex != C.INDEX_UNSET) {player.seekTo(nextWindowIndex, C.TIME_UNSET);} else{Log.d("================","最后一集");}}

HLS多码率切换

HLS多码率切换就是根据m3u8文件内的BANDWIDTH字段来进行切换,BANDWIDTH=700000的时候通过setMaxVideoBitrate(700000)就能切换码率了

2020/4/2更新

由于我跟新了版本到2.+了而我的代码还是1.+的版本,忘了我升级的时候删了代码setForceHighestSupportedBitrate(true),昨天测试发现不能用,现在改成2.+的,2.+是用setMaxVideoSize根据宽高来切换码率的,修改代码

初始化

private SimpleExoPlayer player;private Handler mainHandler;private DefaultTrackSelector trackSelector;private int[] maxWidth = {1920,1280,640};private int[] maxHeight = {1080,720,360};private void initPlayer(){Uri u = Uri.parse("xxx/playlist.m3u8");trackSelector = new DefaultTrackSelector();DefaultTrackSelector.Parameters parameters = trackSelector.getParameters().buildUpon().setMaxVideoSize(maxWidth[0],maxHeight[0]).build();trackSelector.setParameters(parameters);player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this, "ExoPlayer"));MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(u, mainHandler, null);player.prepare(videoSource);}

切换

public void change(int index){DefaultTrackSelector.Parameters parameters = trackSelector.getParameters().buildUpon().setMaxVideoSize(maxWidth[index],maxHeight[index]).build();trackSelector.setParameters(parameters);}

Exoplayer的中文文档太少了,英文找的好累啊

这篇关于Exoplayer多视频切换和HLS多码率手动切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978729

相关文章

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env

ScrollView 非手动调用的方法

1. /**  *  非人为的时候调用这个方法  *  *  @param scrollView <#scrollView description#>  */ - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {           } 2.判断控制器的view是否加载过 [willShowVC

redis切换数据库的方法【jedis】

package com.test;import redis.clients.jedis.Jedis;public class readredis {public static void main(String[] args) {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(10);String v

RISC-V教学内容及短视频吸引因素

RISC-V 教学内容 在我的认知中,大多数人对RV仍然了解甚少,我想本实习岗位主要面向对 RV 不了解或了解很少的同学,帮助大家更好入门。 因此教学内容为: RISC-V 简要介绍;RISC-V 指令集知识简要讲解,指令集介绍,各个指令集的指令规则及指令运行演示,可以结合模拟器运行结果讲解更为直观;常见 RV 模拟器介绍,分别适用的场景。对于一些简单的 RV 模拟器可以展开讲解安装部署使用

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

google gemini1.5 flash视频图文理解能力初探(一)

市面能够对视频直接进行分析的大模型着实不多,而且很多支持多模态的大模型那效果着实也不好。 从这篇公众号不只是100万上下文,谷歌Gemini 1.5超强功能展示得知,Gemini 1.5可以一次性处理1小时的视频、11小时的音频或100,000行代码,并衍生出更多的数据分析玩法。能力覆盖: 跨模式理解和推理,当给出一部 44 分钟的巴斯特-基顿(Buster Keaton)无声电影时,该模型能准

警惕!推广文章与视频的兼职骗局大揭秘

在互联网时代,我们常常会看到各种各样的推广兼职信息,承诺可以轻松赚钱,特别是在推广文章和视频方面。然而,在这些看似诱人的机会背后,往往隐藏着一些骗局。本文将为大家揭示这些骗局,帮助大家避免上当受骗。 一、骗局特征 1. **高额回报承诺**:骗子常常以高额的回报作为诱饵,声称只要转发文章、分享视频,就能获得丰厚的佣金或收益。然而,这种不切实际的高额回报往往是骗局的开始。 2. **简单操作

切换国内yum源

切换国内yum源 一、备份现有YUM源二、下载新的YUM源配置文件三、先清理YUM缓存再生成四、测试新的YUM源五、重启系统服务(生效可以不重启)可选 首先,切换国内YUM源的具体步骤取决于您使用的Linux发行版和当前的YUM源配置。以下是一般步骤,适用于大多数基于Red Hat的发行版,如CentOS和Fedora: 一、备份现有YUM源 在修改YUM源之前,建议先备份现

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 (一)概述 (二)视频接入能力介绍 (三)功能介绍 二、JT/T905协议介绍 (一)概述 (二)主要内容 1、设备要求 2、业务功能要求 3、技术功能要求 4、性能要求 5、接口要求 6、设备通信协议与数据格式 三、代码和解释 (一)代码和注释 (二)函数功能说明 1. 头文件保护 2. 包含必要的头文件 3. 引入命名空间std