如何使用具有分辨率切换能力的原生 Android 制作视频播放器,就像我们在 YouTube 中看到的那样?

Posted

技术标签:

【中文标题】如何使用具有分辨率切换能力的原生 Android 制作视频播放器,就像我们在 YouTube 中看到的那样?【英文标题】:How to make a Video Player using Native Android that have resolution switching ability like we see in YouTube? 【发布时间】:2020-03-16 08:28:26 【问题描述】:

我想使用视频播放器,例如。在 android 应用中使用 ExoPlayer,它将支持我们在 YouTube 中看到的分辨率切换。

我的 API 有 480p、720p、1080p 的视频文件。 我想在播放器中提供这些选项,并且可以从播放器本身切换它,并从 URL 播放相应的文件。

我见过诸如轨道选择器之类的解决方案,但是这适用于在线文件吗?我有类似的链接:

www.example.com/videos/480/demo.mp4
www.example.com/videos/720/demo.mp4
www.example.com/videos/1080/demo.mp4

请建议是否有其他解决方案,例如 API 更改或任何其他协议等。

【问题讨论】:

【参考方案1】:

为什么不使用 ffmpeg 将 mp4 文件转换为 hls 或 mpd 流格式,以便您可以逐块流式传输,播放器将根据他的算法选择最佳分辨率?

【讨论】:

听起来不错,但我可以手动设置分辨率吗? 当然可以,查看文档:exoplayer.dev/track-selection.html【参考方案2】:

看看这个项目,这允许用户通过从 ffmpeg 编码的 hls 流中选择轨道手动选择分辨率。

https://github.com/namespace7/HLS_Player

要从视频中生成 hls 流,请通过此链接 https://superuser.com/a/1302736/1108219

【讨论】:

以上是关于如何使用具有分辨率切换能力的原生 Android 制作视频播放器,就像我们在 YouTube 中看到的那样?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 iPhone 6 原生分辨率?

如何在颤动中管理开关小部件的原生外观

解决在Mac的Vmware Fusion中装win7系统和mac原生系统直接切换win7系统分辨率变化的问题

如何使用 Android 代码更改分辨率(大小)和密度,Runtime.getRuntime().exec(...) 不起作用

如何在android原生中加载RN页面

如何利用 play2() 函数进行视频的快速流切换?