首先是如何让其他软件能调起自己写的播放器
可以参照系统源代码
将下面这些代码拷贝到SystemVideoPlayer的Activity配置清单处:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="rtsp" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/*" />
<data android:mimeType="application/sdp" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:mimeType="video/mp4" />
<data android:mimeType="video/3gp" />
<data android:mimeType="video/3gpp" />
<data android:mimeType="video/3gpp2" />
</intent-filter>
然后点击一个视频文件的时候,系统会传递这个视频文件的地址,这样就可以调用这个播放器了。
接下来判断一下如果有网络视频的话,地址是本地的还是网络的。在Utils.class中添加下面的方法:
public boolean isNetUri(String uri) {
boolean reault = false;
if (uri != null) {
if (uri.toLowerCase().startsWith("http") || uri.toLowerCase().startsWith("rtsp") || uri.toLowerCase().startsWith("mms")) {
reault = true;
}
}
return reault;
}
然后在下面这些地方添加判断:
private boolean isNetUri;
setData(){
if (mediaItems != null && mediaItems.size() > 0){
...
isNetUri = utils.isNetUri(mediaItem.getData());
...
} else if (uri != null){
...
isNetUri = utils.isNetUri(uri.toString());
...
}
}
private void playPreVideo(){
if(position >= 0){
...
isNetUri = utils.isNetUri(mediaItem.getData());
...
}
}
private void playNextVideo(){
if (position < mediaItems.size()){
...
isNetUri = utils.isNetUri(mediaItem.getData());
...
}
}
接下来如果判断视频来源于网络,就去为视频做缓冲,在每秒发一次消息的handler中添加:
case PROGRESS:
...
//缓存进度的更新
if (isNetUri) {
//只有网络资源才有缓存效果
int buffer = videoview.getBufferPercentage();//0~