从本地读取视频以及播放(3)——学习笔记

首先是如何让其他软件能调起自己写的播放器

可以参照系统源代码
将下面这些代码拷贝到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~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值