要点是,它MediaPlayer
确实可以播放 (通过URL和自定义两种方式MediaDataSource
),但是 流只能通过URL像一样播放DataSource
。
因此,让我们了解幕后情况。
当您将URL作为数据源传递时,将执行以下检查:
if ("file".equals(scheme)) {
path = uri.getPath();
} else if (scheme != null) {
// handle non-file sources
nativeSetDataSource(
MediaHTTPService.createHttpServiceBinderIfNecessary(path),
path,
keys,
values);
return;
}
MediaPlayer
使用MediaHTTPService
类,它负责提供从数据http
,https
和widevine
协议。MediaHTTPService
在内部使用MediaHTTPConnection
,使用这种类型的流需要花费大量的精力。不幸的是,这些API尚未公开(但是),但是您可以看到如何在MediaHTTPConnection
源中建立连接(特别是seekTo
method)。因此,您提供的自定义数据源MediaPlayer
应该大致描述MediaHTTPConnection
该类实现的逻辑。