java - Exoplayer 自定义数据源:有没有办法让玩家请求大块数据?
问题描述
我已经实现了自定义DataSource
与ProgressiveMediaSource
.
private MediaSource buildMediaSource() {
MyDataSource.Factory factory = new MyDataSource.Factory(getItem());
return new ProgressiveMediaSource.Factory(factory).createMediaSource(Uri.EMPTY);
}
当我尝试打开多个 MKV 文件时,播放read(byte[] buf, int offset, int readLength)
器多次调用函数,传递1
为readLength
.
这会导致视频开始播放前几分钟的初始化时间(播放器希望在我拥有的视频上按 1 个字节读取 600000 次)
对于测试,我设置了自己的 http 服务器并为此视频形成了一个 uri,然后我像这样使用它:
new ProgressiveMediaSource.Factory(new DefaultHttpDataSourceFactory("sdfsdfds")).createMediaSource(uri); // uri looks like http://127.0.0.1:34567/video.mkv
然后玩家开始请求16384
as readLength
。视频初始化需要几秒钟。
有没有办法告诉玩家阅读更大的块?或者也许有办法告诉 MatroskaExtractor 忽略一些不需要的东西?我仍然需要寻找
解决方案
我的问题是,对于每个 read() 我都必须从本机库中调用一些函数,从而将 java 结构转换为 c++,然后再返回 java 以获得响应。
对于仅 1 个字节,这是非常繁重的操作。快速测试表明,在 java 端预加载大量数据可以将初始化速度从几分钟缩短到几秒钟。
推荐阅读
- javascript - 推送到多维数组返回填充数组
- r - 在 R 中添加直到今天日期的行
- arduino-uno - 从 'int' 到 'char*' 的无效转换 [-fpermissive]
- python-3.x - 有没有办法在 Linux for Python 中清除控制台历史记录?
- websocket - 使用 permessage-deflate 解码 websocket
- powershell - Write-Verbose 如何从 Invoke-Sqlcmd 生成记录数?
- nested - 如果值以(嵌套或要进行多次替换)开头,则 Excel Power Query 替换值
- python - 数据框行切片不一致
- python - 使用 Ray 进行加入或分组操作
- react-native - 在 React-Native Android 中,有没有办法从 ViewManager 获取组件的高度/宽度?