我从谷歌官方Exoplayer库得到的答案是
DefaultDataSource支持本地和Http源。它会自动检测要使用哪一个。
所以我改变了
private MediaSource buildMediaSource(Uri uri){
return new ExtractorMediaSource(uri,
new DefaultHttpDataSourceFactory("ua"),
new DefaultExtractorsFactory(),null,null);
}
到这个
private MediaSource buildMediaSource(Uri uri){
return new ExtractorMediaSource(uri,
new DefaultDataSourceFactory(context,"ua"),
new DefaultExtractorsFactory(),null,null);
}
DefaultDataSourceFactory
自动检测流或本地存储文件,其中
DefaultHttpDataSourceFactory
仅适用于流媒体请求。
更新
:随着新版本的推出(2.9.0)。有些类也不推荐使用媒体源。我正在使用新版本的媒体源,它可以播放几乎所有类型的文件(MP3、MP4、AVI等)
private MediaSource buildMediaSourceNew(Uri uri,int buildType){
DataSource.Factory datasourceFactroy = new DefaultDataSourceFactory(context, Util.getUserAgent(context,"Your App Name"));
return new ExtractorMediaSource.Factory(datasourceFactroy).createMediaSource(uri);
}