目前有看到幾種方法
1 . Media Player 直接撥放
2 . 利用HttpClient連結
3 . Vitamio
實驗結果
如果直接使用方法 1 :
常常因為硬體廠商有無對軟體矯正,LG目前可行,星星星、$ony目前都會出現Error ( 100 , 0 )
直接說明 Vitamio
他有 MediaPlayer 功能,但是相較之下,Vitamio設計的 MediaPlayer 功能更為強大。
但請注意若App內有包含Vitamio和MediaPlayer,必須明確指向路徑!!!
以下是 Rtsp 範例 :
若程式碼內有 " 請更改為 "
1 . 首先下載 : https://www.vitamio.org/Download/
2 . Sample的內容非常實用
3 . 若無方向,這整理出一個範例
4 . 找下載好的 Vitamio 裡面的Lib
5 . 建立一個新的專案並且匯入上一步的Lib( 專案要在同層比較不會有錯誤 )
6 . activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<SurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/sub1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true" />
</RelativeLayout>
7 . MainActivity.java
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>package com.example.rstp_sample;
import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.MediaPlayer.OnPreparedListener;
import io.vov.vitamio.MediaPlayer.OnTimedTextListener;
import java.io.IOException;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements Callback, OnPreparedListener, OnTimedTextListener {
SurfaceView splayer;
SurfaceHolder sholder;
TextView tv;
private MediaPlayer mediaPlayer;
private String path = "http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4";
private boolean first = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!LibsChecker.checkVitamioLibs(this))
return;
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.sub1);
splayer = (SurfaceView) findViewById(R.id.surface);
sholder = splayer.getHolder();
sholder.setFormat(PixelFormat.RGBA_8888);
sholder.addCallback(this);
}
@Override
protected void onResume() {
super.onResume();
if(first==true){
first =false;
}else {
relaMediaPlay();
playVideo();
}
}
private void playVideo() {
try {
if (path == "") {
// Tell the user to provide an audio file URL.
return;
}
mediaPlayer = new MediaPlayer(this);
mediaPlayer.setDataSource(path);
mediaPlayer.setDisplay(sholder);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnTimedTextListener(this);
// TODO Auto-generated catch block
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
playVideo();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
private void startVPback() {
mediaPlayer.start();
}
@Override
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
startVPback();
mediaPlayer.addTimedTextSource(Environment.getExternalStorageDirectory() + "/12.srt");
mediaPlayer.setTimedTextShown(true);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
relaMediaPlay();
}
private void relaMediaPlay() {
// TODO Auto-generated method stub
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
relaMediaPlay();
}
@Override
public void onTimedText(String text) {
// TODO Auto-generated method stub
tv.setText(text);
}
@Override
public void onTimedTextUpdate(byte[] pixels, int width, int height) {
// TODO Auto-generated method stub
}
}
</code></pre>
8 . 重點( AndroidManifest.xml ) :
要記得新增頁面
<activity
android:name="io.vov.vitamio.activity.InitActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:launchMode="singleTop"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" />
9 . 權限
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
10 . 完成
歡迎轉載,請註明出處。
沒有留言:
張貼留言