android調用播放器播放視頻
㈠ Android如何播放mov格式的視頻文件
Android播放「mov」格式的視頻文件時,可以藉助第三方軟體將「mov」格式轉換成「mp4」。
此處以微信為例,具體步驟如下:
1、打開安卓手機的微信軟體,點開任意聊天框將「mov」格式的視頻發送過去。
(1)android調用播放器播放視頻擴展閱讀:
MP4與MOV的區別:
「mp4」格式的視頻相比起「mov」格式的視頻體積要小得多,前者格式壓縮率相比後者要大得多,雖然相對來說更省存儲空間,但畫質將會受到影響,很不利於後期編輯和製作,尤其是後期特效和調色。
這一點很像數碼相機的RAW格式和jpeg格式,前者為無損壓縮格式後者則是有損壓縮格式,前者的後期調整餘地更大。這也是很多資深的攝影者更願意用前者拍攝的原因。
㈡ Android音視頻【十二】使用OpenSLES和AudioTrack進行播放PCM
本節我們學習下如何播放pcm數據,在Android中有兩種方法:一種是使用java層的 AudioTrack 方法,一種是使用底層的 OpenSLES 直接在 jni 層調用系統的 OpenSLES的c方法 實現。
兩種使用場景不一樣:
AudioTrack 一般用於 比如本地播放一個pcm文件/流,又或者播放解碼後的音頻的pcm流,API較簡單。
OpenSLES 一般用於一些播放器中開發中,比如音頻/視頻播放器,聲音/音頻的播放採用的OpenSLES,一是播放器一般是c/c++實現,便於直接在c層調用OpenSLES的API,二也是如果用AudioTrack進行播放,務必會帶來java和jni層的反射調用的開銷,API較復雜。
可以根據業務自行決定來進行選擇。
AudioTrack的方式使用較簡單,直接在java層。
指定采樣率,采樣位數,聲道數進行創建。
其中44100是采樣率, AudioFormat.CHANNEL_OUT_STEREO 為雙聲道,還有 CHANNEL_OUT_MONO 單聲道。 AudioFormat.ENCODING_PCM_16BIT 為采樣位數16位,還有 ENCODING_PCM_8BIT 8位。 minBufferSize 是播放器緩沖的大小,也是根據采樣率和采樣位數,聲道數 進行獲取,只有滿足最小的buffer才去操作底層進程播放。
最後一個參數mode。可以指定的值有 AudioTrack.MODE_STREAM 和 AudioTrack.MODE_STATIC 。
MODE_STREAM 適用於大多數的場景,比如動態的處理audio buffer,或者播放很長的音頻文件,它是將audio buffers從java層傳遞到native層。音頻播放時音頻數據從Java流式傳輸到native層的創建模式。
MODE_STATIC 適用場景,比如播放很短的音頻,它是一次性將全部的音頻資源從java傳遞到native層。音頻數據在音頻開始播放前僅從Java傳輸到native層的創建模式。
是的,就這么一個方法。注意此方法是同步方法,是個耗時方法,一般是開啟一個線程循環調用 write 方法進行寫入。
注意在調用 write 方法前需要調用 audioTrack.play() 方法開始播放。
因為是pcm裸數據,無法像mediaplayer一樣提供了API。所以需要自己處理下。可以利用 getPlaybackHeadPosition 方法。
getPlaybackHeadPosition() 的意思是返回以幀為單位表示的播放頭位置
getPlaybackRate() 的意思是返回以Hz為單位返回當前播放采樣率。
所以當前播放時間可以通過如下方式獲取
OpenSLES:(Open Sound Library for Embedded Systems).
OpenSLES是跨平台是針對嵌入式系統精心優化的硬體音頻加速API。使用OpenSLES進行音頻播放的好處是可以不依賴第三方。比如一些音頻或者視頻播放器中都是用OpenSLES進行播放解碼後的pcm的,這樣免去了和java層的交互。
在Android中使用OpenSLES首先需要把Android 系統提供的so鏈接到外面自己的so。在CMakeLists.txt腳本中添加鏈接庫OpenSLES。庫的名字可以在 類似如下目錄中
需要去掉lib
然後導入頭文件即可使用了OpenSLES提供的底層方法了。
創建&使用的步驟大致分為:
一個 SLObjectItf 裡面可能包含了多個Interface,獲取Interface通過 GetInterface 方法,而 GetInterface 方法的地2個參數 SLInterfaceID 參數來指定到的需要獲取Object裡面的那個Interface。比如通過指定 SL_IID_ENGINE 的類型來獲取 SLEngineItf 。我們可以通過 SLEngineItf 去創建各種Object,例如播放器、錄音器、混音器的Object,然後在用這些Object去獲取各種Interface去實現各種功能。
如上所說,SLEngineItf可以創建混音器的Object。
在創建播放器前需要創建音頻的配置信息(比如采樣率,聲道數,每個采樣的位數等)
開始播放後會不斷的回調這個 pcmBufferCallBack 函數將音頻數據壓入隊列
(*pcmBufferQueue)->RegisterCallback(pcmBufferQueue, pcmBufferCallBack, this);
如果想要暫停播放參數直接設置為SL_PLAYSTATE_PAUSED,若暫停後繼續播放設置參數為SL_PLAYSTATE_PLAYING即可。若想要停止播放參數設置為SL_PLAYSTATE_STOPPED即可。
首先獲取播放器的用於控制音量的介面SLVolumeItf pcmVolumePlay
然後動態設置
首先也是獲取播放器的用於控制音量的介面SLMuteSoloItf pcmMutePlay
然後動態設置
看起來控制還是蠻簡單的哈。先熟悉這么多,OpenSLES還是蠻強大的。
https://github.com/ta893115871/PCMPlay
㈢ android如何調用系統視頻播放器,而且沒有發送qq這個選項
在Activity中的btn,點擊btn調用系統默認播放器進沒蘆行本地視模察舉頻播旦碧放
public Intent getVideoFileIntent(File videoFile)
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot", 0);
intent.putExtra("configchange", 0);
Uri uri = Uri.fromFile(videoFile);
intent.setDataAndType(uri, "video/*");
return intent;
}
在OnCreate函數中:
btnplay = (Button)findViewById(R.id.button_play2);
btnplay.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
File file1 = new File("/sdcard/test.mp4");
Intent intent = getVideoFileIntent(file1);
startActivity(intent);
}
});
㈣ 安卓視頻播放(阿里雲視頻點播播放器SDK+SurfaceView)
本篇文章講述使用阿里雲視頻視頻播放sdk中的高級播放器加上SurfaceView實現,採用id+STS方法進行視頻播放。
流程:用戶App獲取STS憑證 -> 服務端下發STS憑證 -> 用戶上傳視頻並獲取vid -> 服務端獲取STS憑證 -> 將STS憑證下發給客戶端 -> 完成視頻播放。
請看阿里雲文檔=========》》》》》》 阿里雲-高級播放器Android使用說明
接下來我們來看一下安卓給我們提供的手勢控制類
介面
setOnTouchListener(this);
其中定義了四種狀態 NONE = 0, VOLUME = 1, BRIGHTNESS = 2, FF_REW = 3;
接下來我們來看一下我們自定義的SurfaceViewOnGestureListener繼承 GestureDetector.SimpleOnGestureListener主要用到了
onDown(MotionEvent e)
onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)兩個方法
a.在onDown的時候把狀態設置NONE
b.判斷橫向滑動的距離大於縱向滑動的距離,就把模式賦值為快進和後退
c.在onScroll中進行狀態賦值,根據滑動的距離,如果按下的點在屏幕的左半部分就吧狀態設置為調節亮度BRIGHTNESS,如果在右半部分就是調節音量
d.各種情況調用各自的介面方法
快進和後退,我們需要知道的就是我們滑動的距離如何與視頻的長度關聯起來。
那麼咱們就可以把視頻的總長度與屏幕的總長度相比,這樣就能知道你手指滑動的距離占視頻的多少了。
我們可以通過 l = ration / mySurfaceView.getWidth();來獲得這個比例,然後用當前的進度加上指滑動的距離占視頻的長度就是要播放的視頻位置
抬起點的x坐標與按下點的X坐標所得的距離,大於0是快進,小於零是後退。
系統的音量有很多,包括通話音量值,系統鈴聲值,音樂音量值,鬧鈴音量值,等等吧。
做一下筆記以備以後用到
視頻播放我們用的是音樂音量值,同樣的道理,我們需要把音量和高度進行關聯,我們可以控制項的高度閉上最大音量得出比例後就可以知道你滑動的距離占音量的多少了。
這里有個注意點就是activity是當前的這個界面,設置的是當前的界面,離開這個界面後就不管用了。
相同的道理和滑動調節音量一樣也是獲得屏幕的高度比上最大的亮度,然後計算滑動的距離轉換成亮度是多少。(這里不多講了)
為什麼會出現黑屏,就是按Home鍵再點App回來後,只有聲音沒有圖片的問題,因為我們用的是SurfaceView,每次點擊Home鍵時會銷毀這個SurfaceView,再回來時又會重新創建,這樣我們的阿里雲播放器與SurfaceView就沒有綁定了,畫面就沒有了。
這樣我們需要 給surfaceView添加mySurfaceView.getHolder().addCallback(this);
我們在按home鍵的時候會走surfaceDestroyed。這樣,我們就可以在這里做一個標識,讓他暫停,然後再回來的時候就會走surfaceCreated,判斷標識,然後進行處理就可以了。切記一定要重新讓aliyunVodPlayer與SurfaceView進行關聯,這樣才能有畫面也有聲音。
由於我們的視頻在阿里雲的伺服器上存著,訪問阿里雲的伺服器需要臨時憑證,我們通過STS來獲取Token,但是這個Token是有時間限制,正好阿里雲的播放器給我們提供了播放視頻出錯時候的回調介面,我們只需要在這裡面進行重新請求Token就可以了
㈤ 安卓手機mov格式視頻用什麼播放器能看
安卓手鋒尺機mov格式視頻用XPlayer播放器能看,具體步驟如下:
1、在安卓手機下載XPlayer播放器。
㈥ Android實現視頻播放的幾種方式
Android提供了常見的視頻編碼,解碼機制,使用Android自帶的MediaPlayer,MediaController等類可以很方便的實現視頻播放的功能。支持的視頻格式有MP4和3GP等。這些多媒體數據可以來自於Android應用的資源文件,也可以來自於外部存儲器上的文件,甚至可以是來自於網路上的文件流。
1、MediaController+VideoView實現方式
這種方式是最簡單的實現方式。VideoView繼承了SurfaceView同時實現了MediaPlayerControl介面,MediaController則是安卓封裝的輔助控制器,帶有暫停,播放,停止,進度條等控制項。通過VideoView+MediaController可以很輕松的實現視頻播放、停止、快進、快退等功能。
布局文件如下:
使用此實現方式的步驟:
1.載入指定的視頻文件
2.建立VideoView和MediaController之間的關聯,這樣就不需要自己去控制視頻的播放、暫停等。讓MediaController控制即可。
3.VideoView獲取焦點。
2、MediaPlayer+SurfaceView+自定義控制器
雖然VideoView的實現方式很簡單,但是由於是自帶的封裝好的類,所以無論是播放器的大小、位置以及控制都不受我們控制。
這種實現方式步驟如下:
1.創建MediaPlayer對象,並讓它載入指定的視頻文件。可以是應用的資源文件、本地文件路徑、或者URL。
2.在界面布局文件中定義SurfaceView組件,並為SurfaceView的SurfaceHolder添加Callback監聽器。
3.調用MediaPlayer對象的setDisplay(SurfaceHolder sh)將所播放的視頻圖像輸出到指定的SurfaceView組件。
4.調用MediaPlayer對象的prepareAsync()或prepare()方法裝載流媒體文件
5.調用MediaPlayer對象的start()、stop()和pause()方法來控制視頻的播放。
在實現第二步之前需要先給surfaceHolder設置一個callback,callback的3個回調函數如下:
3、MediaPlayer+SurfaceView+MediaController
第二種實現方式使用的是自定義控制項,MediaPlayer+SurfaceView也可以使用系統自帶的MediaController控制器。
使用這個方式實現,布局文件只需一個SurfaceView即可,其他的控制項都交給MediaController控制器,布局文件如下:
實際過程中推薦大家使用B站的播放器ijkplayer非常好用!