android軟解碼
① android手機RockPlayer視頻播放器中,硬解跟軟解有什麼區分,哪個相對要好些
硬解是用GPU(顯示晶元)進行解碼。軟解使用CPU(中央處理器)進行解碼。硬解不耗CPU,軟解非常耗CPU,假如你的手機配置不高,就用硬解吧,軟解會很卡。在解碼器好的情況下,軟解的質量比硬解好。android平台上一般用libavcodec,這個解碼器很不錯,解出來的質量當然好。
② 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,暫時還不適合發布。
③ 有什麼軟體可以自動輸入密碼破解密碼
Ciphey。
Ciphey 是一個使用自然語言處理和人工智慧的全自動解密/解碼/破解工具。 簡單地來講,你只需要輸入加密文本,它就能給你返回解密文本。
WiFi萬能鑰匙 是一款自動獲取周邊免費Wi-Fi熱點信息並建立連接的android和iOS手機必備工具。 所有的熱點信息基於雲端資料庫,內置全國數萬Wi-Fi熱點數據,隨時隨地輕松接入無線網路,最大化使用各種聯網的移動服務,掃除無網斷網的狀態,尤其適合商務人群、移動人群和重度網蟲。
④ 為什麼Android視屏播放 軟解碼會卡
你的手機CPU不行,或者是內存過小
⑤ 將電影轉成群暉videostation能播放的格式
要Mxplayer的硬解碼硬解碼+軟解碼超級好用。
另外需要注意的是,自定義編解碼器需要用指定的版本,如果你的Mxplayer升級了,自定義編解碼器也應該替換成對應的版本才對。
在Android設備硬解不支持的情況下選擇使用軟解碼,不管怎麼樣,視頻至少能夠播放,具有更好的適應性,但是增加了CPU的佔用,更加費電。
⑥ android下視頻文件從解碼到播放需要哪幾步,請簡述
Android通過軟解碼播放視頻
1, 一般情況下Android的平台都是硬解碼視頻的,尤其是在Arm平台這種成熟的硬體平台上面(硬解碼代碼由晶元廠商提供)。但是Android移植到
2, MIPS平台時間還不長,還不成熟,還需要自己實現硬體解碼的工作。為了早日讓Android在MIPS平台運行起來,我選擇了先用軟解碼播放視頻。
3,Android代碼是從Android on MIPS社區獲得的代碼。發現軟解碼視頻播放過程中會發生崩潰。經過分析好像是內存分配的問題。
4, 經過研究OpenCore庫(Android框架是通過OpenCore來播放視頻的,網上有很多關於OpenCore的介紹,這里就不多說了),並參考Android平台——Surfaceflinger機制。發現問題出在源文件:
frameworks/base/libs/surfaceflinger/LayerBuffer.cpp的LayerBuffer::BufferSource::postBuffer方法中:
............
buffer = new LayerBuffer::Buffer(buffers, offset);
............類LayerBuffer::Buffer的構造函數代碼如下:
LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset)
: mBufferHeap(buffers)
{
NativeBuffer& src(mNativeBuffer);
g.handle = 0;
gralloc_mole_t const * mole = LayerBuffer::getGrallocMole();
if (mole && mole->perform) {
int err = mole->perform(mole,
GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER,
buffers.heap->heapID(), buffers.heap->getSize(),
offset, buffers.heap->base(),
& g.handle);
if (err == NO_ERROR) {
op.l = 0;
op.t = 0;
op.r = buffers.w;
op.b = buffers.h;
g.w = buffers.hor_stride ?: buffers.w;
g.h = r_stride ?: buffers.h;
rmat = rmat;
se = (void*)(intptr_t(buffers.heap->base()) + offset);
}
}
}LayerBuffer::getGrallocMole方法的調用到的Gralloc為:
hardware/libhardware/moles/gralloc/gralloc.cpp因為的沒有實現在自己的硬體只能用通用的Gralloc,經過分析發現通用的Gralloc沒有實現
5, mole->perform函數指針,mole->perform為NULL,所以不會對Buffer進行必要的初始化(我覺得應該是一個疏忽,只是不知道是谷歌的疏忽,還是MIPS移植人員的疏忽,最起碼應該能夠讓通用硬體能跑起來)。參考其他的硬體實現一個perform函數指針到通用Gralloc中。
在源文件:
hardware/libhardware/moles/gralloc/mapper.cpp增加如下的函數定義:
int gralloc_perform(struct gralloc_mole_t const* mole,
int operation, ... )
{
int res = -EINVAL;
va_list args;
va_start(args, operation);
switch (operation) {
case GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER: {
int fd = va_arg(args, int);
size_t size = va_arg(args, size_t);
size_t offset = va_arg(args, size_t);
void* base = va_arg(args, void*);
native_handle_t** handle = va_arg(args, native_handle_t**);
private_handle_t* hnd = (private_handle_t*)native_handle_create(
private_handle_t::sNumFds, private_handle_t::sNumInts);
hnd->magic = private_handle_t::sMagic;
hnd->fd = fd;
hnd->flags = private_handle_t::PRIV_FLAGS_USES_PMEM;
hnd->size = size;
hnd->offset = offset;
hnd->base = intptr_t(base) + offset;
hnd->lockState = private_handle_t::LOCK_STATE_MAPPED;
*handle = (native_handle_t *)hnd;
res = 0;
break;
}
}
va_end(args);
return res;
}然後在gralloc.cpp中增加,gralloc_perform的聲明:
extern int gralloc_perform(struct gralloc_mole_t const* mole,
int operation, ... );並修改HAL_MODULE_INFO_SYM的定義,增加perform欄位的定義:
struct private_mole_t HAL_MODULE_INFO_SYM = {
base: {
.......
perform: gralloc_perform,
},
......
}; 重新編譯gralloc模塊,再次用Gallary應用程序通過軟解碼播放視頻,就可以流暢的播放了,軟解碼的效率挺高的,沒有卡的感覺!