您的位置:首页 > 其它

手机影音8--视频播放器的高级功能(1)

2016-11-15 18:58 176 查看

1.让其他软件能调起自己写的播放器

1.在功能清单文件添加下面的意图

<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>


2.文件或者图片浏览器 //1.调起系统所有的播放-隐式意图 Intent intent = new Intent(); intent.setDataAndType(Uri.parse("视频播放地址"),"video/*"); context.startActivity(intent);

3.视频播放器就会被调起并且播放

uri = getIntent().getData();//文件夹,图片浏览器,QQ空间


4.设置播放地址

videoview.setVideoURI(uri);



2.播放网络视频时候支持显示缓存进度  

1_支持播放网络视频有缓冲效果

/**
* 判断是否是网络资源
* @param uri
* @return
*/
public boolean isNetUri(Uri uri) {
boolean result = false;
if (uri != null) {
if (uri.toString().contains("http")|| uri.toString().contains("RTSP")|| uri.toString().contains("MMS")) {
result = true;
} else {
result = false;
}
}
return result;
}


2_播放网络视频时候支持显示缓存进度

//缓存进度的更新
if (isNetUri) {
//只有网络资源才有缓存效果
int buffer = videoview.getBufferPercentage();//0~100
int totalBuffer = buffer * seekbarVideo.getMax();
int secondaryProgress = totalBuffer / 100;
seekbarVideo.setSecondaryProgress(secondaryProgress);
} else {
//本地视频没有缓冲效果
seekbarVideo.setSecondaryProgress(0);
}


3.监听卡并且提示&监听拖动完成  

1_监听卡并且提示

<!-- 卡的效果 -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_videobuffer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#33000000"
android:visibility="gone"
android:gravity="center"
android:orientation="horizontal">

<ProgressBar
android:layout_width="30dp"
android:layout_height="30dp" />

<TextView
android:id="@+id/tv_netspeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="网速:20kb/s"
android:textColor="@android:color/white"
android:textSize="18sp" />

</LinearLayout>  


代码
在VideoView中定义监听卡方法和监听完成方法

//设置监听卡2.3包括以后的版本才有
videoview.setOnInfoListener(new OnInfoListener() {

@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START://当卡的时候和拖动卡的时候回调
//         Toast.makeText(getApplicationContext(), "视频卡了", 1).show();
player_buffer.setVisibility(View.VISIBLE);
isBuffing = true;
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END://当卡的时候和拖动卡结束的时候回调
//         Toast.makeText(getApplicationContext(), "视频不卡了", 1).show();
player_buffer.setVisibility(View.GONE);
isBuffing = false;
break;
}
return true;
}
});


2_自定义监听卡

//监听卡
if (!isUseSystem) {
if(videoview.isPlaying()){
int buffer = currentPosition - precurrentPosition;
if (buffer < 500) {
//视频卡了
ll_buffer.setVisibility(View.VISIBLE);
} else {
//视频不卡了
ll_buffer.setVisibility(View.GONE);
}
}else{
ll_buffer.setVisibility(View.GONE);
}
}


3_监听拖动完成

//设置拖动完成
videoview.setOnSeekCompleteListener(new OnSeekCompleteListener() {

@Override
public void onSeekComplete(MediaPlayer mp) {
if(isBuffing){
// TODO Auto-generated method stub
player_buffer.setVisibility(View.GONE);
}
}

});


百度搜索:android 获取当前网速
http://www.2cto.com/kf/201412/358191.html

/**
* 得到当前的网速
*@paramcontext
*@return
*/
public String getNetSpeed(Context context) {
long nowTotalRxBytes = TrafficStats.getUidRxBytes(context.getApplicationInfo().uid)==TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB;
long nowTimeStamp = System.currentTimeMillis();
longspeed = ((nowTotalRxBytes - lastTotalRxBytes) *1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
String speedStr = String.valueOf(speed) + " kb/s";
return speedStr;
}


  

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: