我设法创建了一个 MPD 文件,当通过 URL输入ExoPlayer 2.6.0 (MPD 托管在测试服务器中)时,该文件可以完美播放。
但是,我需要在 Android 中创建此 MPD 文件并将其提供给 ExoPlayer,而无需向服务器请求该文件。到目前为止,我试图理解 DashManifest 和 DashManifestParser 类,但没有成功。任何想法如何在 Android 中创建文件并将其直接提供给 ExoPlayer?
我设法创建了一个 MPD 文件,当通过 URL输入ExoPlayer 2.6.0 (MPD 托管在测试服务器中)时,该文件可以完美播放。
但是,我需要在 Android 中创建此 MPD 文件并将其提供给 ExoPlayer,而无需向服务器请求该文件。到目前为止,我试图理解 DashManifest 和 DashManifestParser 类,但没有成功。任何想法如何在 Android 中创建文件并将其直接提供给 ExoPlayer?
播放 DASH 流时,您需要创建一个 DashMediaSource.Factory。第一个参数是 DashChunkSource,它读取清单定义的媒体文件。第二个参数是读取清单的 DataSource.Factory。
所以你需要提供一个 DataSource.Factory 来创建一个 DataSource 来读取你的清单。请参阅manifestDataSourceFactory
下面的代码段:
DashMediaSource.Factory dashMediaSourceFactory = new DashMediaSource.Factory(
new DefaultDashChunkSource.Factory(mediaDataSourceFactory),
manifestDataSourceFactory);
dashMediaSourceFactory.createMediaSource(manifestUri);
a) 本地磁盘上的静态 mpd
如果您的清单存储为本地文件,您可以使用 DefaultDataSourceFactory 并将文件路径作为manifestUri
:
DataSource.Factory manifestDataSourceFactory = new DefaultDataSourceFactory(context, userAgent);
b) 内存清单
如果您的清单在内存中,您可以提供带有自定义 DataSource.Factory 的 ByteArrayDataSource:
DataSource.Factory manifestDataSourceFactory = new DataSource.Factory() {
@Override
public DataSource createDataSource() {
return new ByteArrayDataSource(manifestString.getBytes());
}
};