Ⅰ 小米2s只要下載個mxplayer就什麼格式的視頻都支持了avi可不可以
當然可以。MX Video Player是近段時間出現的一款最優秀的媒體播放器軟體,它能夠播放幾乎每一個影片檔案,並且具備多核心的解碼能力來處理你的影片檔案和字幕。多核解碼功能,MX Video Player是android平台上的第一款能夠支持多核解碼功能額的媒體播放器軟體,根據在雙核Android裝置上的測試結果表明,它能夠取得比單核解碼播放器高達70%的效能。處理器優化,這款播放器針對主要的處理器做了深度的優化,包括ARMR NEON和NVIDIAR Tegra 2的編碼解碼器和渲染引擎。字幕滑動功能,當您滑動字幕文字,影片播放的位置也隨之發生變化的文字顯示的位置;清除文字功能;影片回放功能;手勢功能;其他多達上百項的功能。
希望可以幫到你。
Ⅱ MXPlayer支持哪些格式
MX Player播放器安卓版支持3GP、AVI DIVX、F4V、FLV、MKV、MP4、MPEG、MOV、VOB、WMV、WEBM、XviD格式,並針對ARM NEON 和NVIDIA Tegra 2 CPU做了優化處理,通過S/W或H/W按鈕就可以輕松的更改解碼模式,安裝後會根據CPU型號自動到市場下載對應的解碼包。
特點:
a) 硬體解碼 - 擁有最新的硬體解碼器,更多視頻能受益於硬體加速。
b) 多核心解碼- MX Player 是 Android 平台上第一款多核心解碼視頻播放器,根據在多核設備上的測試,它比單核心解碼效能提高將近70%。
c) 觸屏縮放手勢 - 在屏幕上能輕松地縮放及使用各種手勢。
d) 字幕滑動功能 - 當您滑動字幕,視頻播放位置將隨字幕文字變化位置同步。
e) 兒童鎖 - 讓兒童保持專注而不必擔心他們隨意撥打電話或接觸其他應用程序。 (需要插件)
f) ANDROID 4.1 - 完美支持Android 4.1 Jelly Bean。
Ⅲ 請問avi格式的視頻在安卓系統手機上能看嗎
avi有兩種,壓縮和不壓縮的。如果是不壓縮的,安卓手機肯定可以看。如果是壓縮的,安卓手機沒有解碼器的話,不能看。可以安裝mxplayer,無論是否壓縮,都能看。
MX Player安卓版(手機高清視頻播放器)V1.7.41
http://www.ucbug.cc/soft/7334.html
MX Player – 欣賞高清影片的最佳利器。
a) 硬體解碼 – 擁有最新的硬體解碼器,更多影片能受益於硬體加速。
b) 多核心解碼 - 安卓第一款多核心解碼影片播放器,根據在多核心設備上的測試,它比單核心解碼效能提高將近70%。
c) 觸控縮放手勢 – 在螢幕上能輕松地縮放及使用各種手勢。
d) 字幕滑動功能 – 當您滑動字幕,影片播放的位置將隨字幕文字變化位置同步。
e) 兒童鎖 – 讓孩童保持專注而不必擔心孩子隨意撥打電話或接觸其他應用程式。 (需要套件)
f) ANDROID 4.1 – 完整支援 Android 4.1 Jelly Bean。
*DTS好處是直接播放其他電腦/NAS共享文件。
官方下載:免費版和專業版區別就是谷歌廣告。
當然,除了MX Player,還有以下軟體安裝後可以觀看所有的avi格式(其實主要是安裝了解碼器):
BSplayer
http://shouji..com/soft/item?docid=7262846
DicePlayer播放器
http://shouji..com/soft/item?docid=7108236
RockPlayer2視頻播放器
http://shouji..com/soft/item?docid=7215821
VPlayer影音版
http://shouji..com/soft/item?docid=5866986
MoboPlayer2
http://shouji..com/soft/item?docid=7605974
Mobo Video Player Pro
http://shouji..com/soft/item?docid=2628003
QQ影音
http://shouji..com/soft/item?docid=7508633
XBMC最強播放軟體
http://shouji..com/soft/item?docid=7060419
Ⅳ android mediacodec有什麼方法
Android 用MediaCodec實現視頻硬解碼
本文向你講述如何用android標準的API (MediaCodec)實現視頻的硬體編解碼。常式將從攝像頭採集視頻開始,然後進行H264編碼,再解碼,然後顯示。我將盡量講得簡短而清晰,不展示那些不相關的代碼。但是,我不建議你讀這篇文章,也不建議你開發這類應用,而應該轉而開發一些戳魚、打鳥、其樂融融的程序。好吧,下面的內容是寫給那些執迷不悟的人的,看完之後也許你會同意我的說法:Android只是一個玩具,很難指望它來做靠譜的應用。
1、從攝像頭採集視頻
可以通過攝像頭Preview的回調,來獲取視頻數據。
首先創建攝像頭,並設置參數:
[java] view plain
cam = Camera.open();
cam.setPreviewDisplay(holder);
Camera.Parameters parameters = cam.getParameters();
parameters.setFlashMode("off"); // 無閃光燈
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPictureSize(camWidth, camHeight);
parameters.setPreviewSize(camWidth, camHeight);
//這兩個屬性 如果這兩個屬性設置的和真實手機的不一樣時,就會報錯
cam.setParameters(parameters);
寬度和高度必須是攝像頭支持的尺寸,否則會報錯。要獲得所有支持的尺寸,可用getSupportedPreviewSizes,這里不再累述。據說所有的參數必須設全,漏掉一個就可能報錯,不過只是據說,我只設了幾個屬性也沒出錯。 然後就開始Preview了:
[java] view plain
buf = new byte[camWidth * camHeight * 3 / 2];
cam.addCallbackBuffer(buf);
cam.setPreviewCallbackWithBuffer(this);
cam.startPreview();
setPreviewCallbackWithBuffer是很有必要的,不然每次回調系統都重新分配緩沖區,效率會很低。
在onPreviewFrame中就可以獲得原始的圖片了(當然,this 肯定要 implements PreviewCallback了)。這里我們是把它傳給編碼器:
[java] view plain
public void onPreviewFrame(byte[] data, Camera camera) {
if (frameListener != null) {
frameListener.onFrame(data, 0, data.length, 0);
}
cam.addCallbackBuffer(buf);
}
2、編碼
首先要初始化編碼器:
[java] view plain
mediaCodec = MediaCodec.createEncoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(type, width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
然後就是給他喂數據了,這里的數據是來自攝像頭的:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0)
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, 0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
if (frameListener != null)
frameListener.onFrame(outputBuffer, 0, length, flag);
mediaCodec.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
先把來自攝像頭的數據喂給它,然後從它裡面取壓縮好的數據喂給解碼器。
3、解碼和顯示
首先初始化解碼器:
[java] view plain
mediaCodec = MediaCodec.createDecoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(mime, width, height);
mediaCodec.configure(mediaFormat, surface, null, 0);
mediaCodec.start();
這里通過給解碼器一個surface,解碼器就能直接顯示畫面。
然後就是處理數據了:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, mCount * 1000000 / FRAME_RATE, 0);
mCount++;
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
mediaCodec.releaseOutputBuffer(outputBufferIndex, true);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
}
queueInputBuffer第三個參數是時間戳,其實怎麼寫都無所謂,只要是按時間線性增加的就可以,這里就隨便弄一個了。後面一段的代碼就是把緩沖區給釋放掉,因為我們直接讓解碼器顯示,就不需要解碼出來的數據了,但是必須要這么釋放一下,否則解碼器始終給你留著,內存就該不夠用了。
好了,到現在,基本上就可以了。如果你運氣夠好,現在就能看到視頻了,比如在我的三星手機上這樣就可以了。但是,我試過幾個其他平台,多數都不可以,總是有各種各樣的問題,如果要開發一個不依賴平台的應用,還有很多的問題要解決。說說我遇到的一些情況:
1、視頻尺寸
一般都能支持176X144/352X288這種尺寸,但是大一些的,640X480就有很多機子不行了,至於為什麼,我也不知道。當然,這個尺寸必須和攝像頭預覽的尺寸一致,預覽的尺寸可以枚舉一下。
2、顏色空間
根據ANdroid SDK文檔,確保所有硬體平台都支持的顏色,在攝像頭預覽輸出是YUV12,在編碼器輸入是COLOR_FormatYUV420Planar,也就是前面代碼中設置的那樣。 不過,文檔終究是文檔,否則安卓就不是安卓。
在有的平台上,這兩個顏色格式是一樣的,攝像頭的輸出可以直接作為編碼器的輸入。也有的平台,兩個是不一樣的,前者就是YUV12,後者等於I420,需要把前者的UV分量顛倒一下。下面的代碼效率不高,可供參考。
[java] view plain
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
這里的困難是,我不知道怎樣去判斷是否需要這個轉換。據說,Android 4.3不用再從攝像頭的PreView裡面取圖像,避開了這個問題。這里有個例子,雖然我沒讀,但看起來挺厲害的樣子,應該不會有錯吧(覺厲應然)。http://bigflake.com/mediacodec/CameraToMpegTest.java.txt
3、輸入輸出緩沖區的格式
SDK里並沒有規定格式,但是,這種情況H264的格式基本上就是附錄B。但是,也有比較有特色的,它就是不帶那個StartCode,就是那個0x000001,搞得把他編碼器編出來的東西送給他的解碼器,他自己都解不出來。還好,我們可以自己加。
[java] view plain
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}
4、有時候會死在dequeueInputBuffer(-1)上面
根據SDK文檔,dequeueInputBuffer 的參數表示等待的時間(毫秒),-1表示一直等,0表示不等。按常理傳-1就行,但實際上在很多機子上會掛掉,沒辦法,還是傳0吧,丟幀總比掛掉好。當然也可以傳一個具體的毫秒數,不過沒什麼大意思吧。
Ⅳ android手機有默認解碼器嗎
實際上系統中存在的解碼器可以很多,但能夠被應用使用的解碼器是根據配置來的,在/system/etc/media_codecc.xml中配置。這個文件一般由硬體或者系統的生產廠家在build整個系統的時候提供,一般是保存在代碼的device/[company]/[codename]目錄下的,例如device/samsung/tuna/media_codecs.xml。這個文件配置了系統中有哪些可用的codec以及,這些codec對應的媒體文件類型。在這個文件裡面,系統裡面提供的軟硬codec都需要被列出來。
也就是說,如果系統裡面實際上包含了某個codec,但是並沒有被配置在這個文件里,那麼應用程序也無法使用到!
在這里配置文件裡面,如果出現多個codec對應同樣類型的媒體格式的時候,這些codec都會被保留起來。當系統使用的時候,將後選擇第一個匹配的codec。除非是指明了要軟解碼還是硬解碼,但是Android的framework層為上層提供服務的AwesomePlayer中在處理音頻和視頻的時候,對到底是選擇軟解還是硬解的參數沒有設置。所以雖然底層是支持選擇的,但是對於上層使用MediaPlayer的Java程序來說,還是只能接受默認的codec選取規則。
但是Android提供的命令行程序/system/bin/stagefright在播放音頻文件的時候,倒是可以根據參數來選擇到底使用軟解碼還是硬解碼,但是該工具只支持播放音頻,不支持播放視頻。
一般來說,如果系統裡面有對應媒體的硬體解碼器的話,系統開發人員應該是會配置在media_codecs.xml中,所以大多數情況下,如果有硬體解碼器,那麼我們總是會使用到硬體解碼器。極少數情況下,硬體解碼器存在,但不配置,我猜測只可能是這個硬解碼器還有bug,暫時還不適合發布。
Ⅵ 安卓模擬器怎樣解碼
把安卓模擬器上app的默認解碼改成硬體解碼,但是點不動,下載了解碼器也沒用。相比其他安卓模擬器還有一個最重要的優點說掉了:沒有邊框,沒有黑邊,真正全屏。
把它設置成開機自啟動,就是使用體驗最近似安卓盒子的模擬器了。
Ⅶ 安卓視頻解碼器,這個安卓視頻解碼器的原理是什麼安卓解碼器一般在apk的哪個文件
據我所了解的,MX Player這款安卓影音播放器可以在安裝軟體之後搭配使用解碼器,硬體解碼和軟體解碼可以相互彌補不足。解碼的原理,簡單的理解就是解碼器識別影音文件的編碼方式,然後將其內部代碼編譯成手機硬體可識別並能表現出來的二進制代碼。亦可理解成解碼器認識出來影音文件,然後介紹給手機硬體,最終手機屏幕展現出能被人們看到的圖像和聲音。
安卓解碼器一般在apk的那個文件?這句話不明白你要表達什麼意思。apk是一個已經編譯好的安卓手機軟體格式,內部也是無數代碼組成的。
Ⅷ 手機自帶mediacodec嗎
手機自帶mediacodec。MediaCodec 是 Android 中的編解碼器組件,用來訪問底層提供的編解碼器,手機是自帶mediacodec的。
通常與MediaExtractor、MediaSync、MediaMuxer、MediaCrypto、MediaDrm、Image、Surface和AudioTrack一起使用,MediaCodec幾乎是Android播放器硬解碼的標配。
多媒體晶元的發展
在1996年MMX CPU問世之際,即打亂了多媒體晶元發展的時間表。被英特爾視為近10年來CPU革命性進展的大作MMX,藉由CPU中新增的57個多媒體指令集、8個64位MMX暫存器及32 KB的Cache。
不僅提升了多媒體及通信程序的執行性能,亦顛覆了多媒體及通信產業的生態環境,且以後CPU亦將遵循此方向發展。
軟體MPEG將取代硬體MPEGMPEG—l硬體解決方案在CPU功能較強的情況下,被軟體MPEG取代掉了。MPEG2亦面臨岌岌可危之境。MPEG硬體將謀求PC領域以外的新世界,轉向進攻消費性電子產品。
低級Audio將遭受危機MMX CPU取代音效卡。此時強調高品質、高層次的音效晶元將有脫穎而出的機會。未來可能將以On board或IC整合的形式,對音效卡廠商造成不小的沖擊,從而思索未來轉型之道。
性能的提高MMX旨在增進繪圖卡性能,而AGP也已成為提升系統晶元組與繪圖晶元問的橋梁。因此,繪圖卡將仍會持續,在繪圖晶元上將朝影像、動畫、圖形加速、3D方向整合MMX,輔以影像繪圖加速j棗片將使PC有更大的發揮。
Ⅸ 在android 平台實現硬解的大俠們,你們是怎麼實現硬解碼的
1、視頻尺寸
一般都能支持176X144/352X288這種尺寸,但是大一些的,640X480就有很多機子不行了,至於為什麼,我也不知道。當然,這個尺寸必須和攝像頭預覽的尺寸一致,預覽的尺寸可以枚舉一下。
2、顏色空間
根據ANdroid SDK文檔,確保所有硬體平台都支持的顏色,在攝像頭預覽輸出是YUV12,在編碼器輸入是COLOR_FormatYUV420Planar,也就是前面代碼中設置的那樣。 不過,文檔終究是文檔,否則安卓就不是安卓。
在有的平台上,這兩個顏色格式是一樣的,攝像頭的輸出可以直接作為編碼器的輸入。也有的平台,兩個是不一樣的,前者就是YUV12,後者等於I420,需要把前者的UV分量顛倒一下。
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
3、輸入輸出緩沖區的格式
SDK里並沒有規定格式,但是,這種情況H264的格式基本上就是附錄B。但是,也有比較有特色的,它就是不帶那個StartCode,就是那個0x000001,搞得把他編碼器編出來的東西送給他的解碼器。
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}
Ⅹ 安卓智能無線全頻段解碼機主要功能是什麼
安卓智能無線全頻段解碼器的主要功能:
1.讀取與清除故障碼:
有的解碼器對故障碼有比較詳細的說明,比如是歷史性故障碼還是當前的故障碼,故障碼的次數出現幾次。如果是歷史性故障碼就表示故障較早之前出現過。如今不出現了,但在控制單元ECU裡面有一定的存儲記憶。而當下故障碼則表示是出現的故障,並且通過出現的次數來確定此故障碼是否經常出現,當下故障碼絕大部分和如今出現的系統故障有很大關系。
2.執行器作動測試功能:
我們可以利用解碼器對一些執行器,像噴油嘴、怠速電機、繼電器、電磁閥冷卻風扇等進行人工控制,用以檢測該執行器是否處於良好的工作狀況,當我們在發動機怠速運轉的時候對怠速電機進行作動測試,可以控制其開度的大小,隨著怠速電機處於不同的開度,發動機怠速轉速應該產生相應的高低變化,通過以上的作動測試我們就可以證實怠速電機本身及其控制線路處於正常狀況。同樣我們還可以在發動機運轉時對燃油泵繼電器進行控制,當斷開燃油泵繼電器時,發動機應會很快的熄火。
當然不同的解碼器所能支持的作動測試功能是不一定相同的,有的支持較多的作動測試功能,有的就可能比較少,但不管是屬於哪一種解碼器,我們都應盡量利用其這種功能對工作情況有所懷疑的執行器進行動作測試,以便判斷其是否屬於正常工作狀態。
3.示波器功能:
因為在解碼器的數據流功能中,很多感測器和執行器的信號是採用電壓。頻率或其它並以數字的形式表示的,在發動機實際運轉過程中,由於信號變化很快,我們很難從這些不斷變化的數字中發現問題所在,所以我們可以利用解碼器自帶的示波器功能對電控發動機系統里的曲軸感測器信號。凸輪軸感測器信號、氧感測器信號。某些型號的空氣流量計信號、噴油嘴信號、怠速電機控制信號。點火控制信號等一系列信號,用圖示波形的方式直觀的提供我們作參考。當我們拿所測信號波形與標准信號波形相比較,如有異常之處則表示該信號的控制線路或電子元件本身出現了問題,需要進一步詳細檢查。但如果利用示波器來檢查電子信號也對維修技術人員提出了較高的汽車維修理論知識要求,需要維修技術人員能較熟悉被測感測器或執行器的工作、控制原理,並對示波器具有一定的操作技巧,能正確的觀察波形(波峰、波幅等),否則很難利用好此項功能。
(10)android硬體解碼器擴展閱讀:
解碼器是一種將信息從編碼的形式恢復到其原來形式的器件。在丟失編碼數據的時候,工作人員可以利用解碼器恢復初始設置,也容易被不法分子利用,在一些無人看管的銀行,犯罪分子在門禁刷卡系統上面裝上自己的「解碼器」,儲戶刷卡進門,銀行卡信息便存在他們的解碼器上。同時,他們在ATM機上安裝了攝像頭,用來拍攝儲戶的銀行卡密碼。他們一旦竊取了銀行卡信息和密碼,便通過互聯網傳給同夥,破譯後進行「克隆」,隨後用復制的「克隆卡」在異地取款。
解碼器是一個重要前端控制設備。在主機的控制下,可使前端設備產生相應的動作。解碼器,國外稱其為接收器/驅動器(Receiver/Driver)或遙控設備(Telemetry),是為帶有雲台、變焦鏡頭等可控設備提供驅動電源並與控制設備如矩陣進行通訊的前端設備。通常,解碼器可以控制雲台的上、下、左、右旋轉,變焦鏡頭的變焦、聚焦、光圈以及對防護罩雨刷器、攝像機電源、燈光等設備的控制,還可以提供若干個輔助功能開關,以滿足不同用戶的實際需要。高檔次的解碼器還帶有預置位和巡遊功能。