手機影音8--視頻播放器的高級功能(1)

来源:http://www.cnblogs.com/ganchuanpu/archive/2016/11/15/6066894.html
-Advertisement-
Play Games

1.讓其他軟體能調起自己寫的播放器 1.在功能清單文件添加下麵的意圖 2.文件或者圖片瀏覽器 //1.調起系統所有的播放-隱式意圖 Intent intent = new Intent(); intent.setDataAndType(Uri.parse("視頻播放地址"),"video/*"); ...


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

  

  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在eclipse導入android項目的時候遇到了奇葩問題,再此記錄 遇到的問題就是:將完好的android項目導入到eclipse的時候,原本這是一個很容易的事情,但是導入成功後發現,,,靠eclipse居然識別成了java項目導致不能“run as android appliciation” ...
  • 1.監聽播放出錯 2.萬能解碼框架簡介 1.ffmpeg 2.VLC 3.Vitamio 萬能解碼框架,在Android和IOS平臺上直接使用。Vitamio 能夠流暢播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常見格式的視頻,還可以在 Android 與 iOS ...
  • 在上一節我們一起學習了顯示調用Intent,這一節我們來學習如何隱式調用Ingtent。有了這個我們就可以調用其他的線程,或者程式,可以讓我們的應用程式變得多彩,如打開網頁,撥打電話等。 ...
  • 我們日常開發中BaseAdapter使用非常的多,大家有沒有想過,再進一步封裝,將平常使用的對象集合,利用泛型放入集合中,再也不用每次都重寫那幾個方法了,當然我也提供我的下載地址(https://github.com/androidsihai1/BaseAdapterDemo) ...
  • 上面的 IP 地址從網上百度得來的,以上地址暫時好用,強烈推薦 超級PING 獲得 IP。 ...
  • 今天是Android第一天的學習,對於學習任何一門課程時我們都要對該課程要有基本的瞭解和認識,瞭解該課程學點什麼內容,學了這門知識我門能夠做些什麼,這也是對於我們這些剛入門的學習人員來說是一個必須要弄清清楚的,那對於該門課程我們是學習的是Android那安卓到底有什麼用途呢?小編我在這裡簡述一下 第 ...
  • 一、配置jdk環境(學過java的請無視) 1.安裝jdk jdk下載地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html 進去後根據自己的系統位數下載 下載完成後安 ...
  • 一、JDK(不用安裝)1.下載適合的jdk2.配置環境變數 添加一系統邊=變數 JAVA_HOME=D:\Java\jdk1.8.0_91 CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...