新聞中心
Android Studio中怎么設(shè)置工作空間編碼
我們在使用Android Studio編寫Android項目的時候,會發(fā)現(xiàn)在運(yùn)行的時候,手機(jī)上看到的中文字符是亂碼,這是怎么回事呢?這是因為Android Studio的默認(rèn)編碼格式為GBK,而我們一般情況下用的是UTF-8,那么我們要怎樣修改Android Studio的編碼格式呢?今天下邊就加大家怎樣修改Android Studio工作空間編碼格式
創(chuàng)新互聯(lián)是一家專業(yè)提供鐵門關(guān)企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5場景定制、小程序制作等業(yè)務(wù)。10年已為鐵門關(guān)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
1、首先打開Android Studio,單擊菜單欄中的“File”菜單
2、在彈出的“File”子菜單中,單擊Setting菜單,進(jìn)入設(shè)置面板
3、在“Settings”面板中,選擇“Editor”選項
4、在展開的下一級菜單中選擇“File Encodings”選項,在面板右側(cè)會出現(xiàn)對該面板的所有設(shè)置
5、然后再面板右側(cè)中的“IDE Encoding”選擇為“UTF-8”,將“Project Encoding”也設(shè)置為“UTF-8”
6、接下來在最下面的“Default encoding for properties files”選項中也將其更改為UTF-8,然后在后面的復(fù)選框上打上對勾
7、然后選擇“Apply”應(yīng)用剛才的更改,然后重啟Android Studio
8、重啟后會發(fā)現(xiàn)此時工作空間的編碼規(guī)則以變?yōu)椤癠TF-8”.
注意事項:我們的手機(jī)一般情況下都是用的是“UTF-8”,所以用GBK編碼的時候會出現(xiàn)亂碼,所以請大家記得修改
android studio怎么設(shè)置編碼格式
android studio設(shè)置編碼格式的方法:
Settings - File Encodings - IDE Encoding / Project Encoding 可以自己選擇編碼GBK, GB2312或UTF8等,根據(jù)自己需要。
android 怎么輸出中文編碼
android文件編碼,可以直接右鍵現(xiàn)在屬性,就可以切換編碼方式,選擇gbk即可。不過通用的是選擇UTF-8,這樣就可以通用了。
Android studio之編碼問題,編碼 EUC_CN的不可映射字符
打開菜單欄下的studio 的設(shè)置界面
File-Setting
搜索File Encodings然后來進(jìn)行設(shè)置 編碼
編譯項目,出現(xiàn)故障gradle: 警告:編碼 EUC_CN 的不可映射字符
這主要是gradle沒有支持UTF-8編碼。找到的解決方案是在build.gradle配置文件中末尾加入一句腳本即可解決,腳本內(nèi)容如下:
//設(shè)置編碼
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
如何設(shè)置Android studio切換文件編碼格式
設(shè)置Android studio切換文件編碼格式的方法如下:
使用Android studio打開已有的安卓項目,同時選中一個已經(jīng)有編碼的界面,如圖:
?
然后點(diǎn)擊file選項,如圖所示:
在彈出的菜單中選擇“file Encoding”,如圖所示:
當(dāng)點(diǎn)擊完“file Encoding”選項時,會出現(xiàn)語言選擇器,目前默認(rèn)的是gbk格式,點(diǎn)擊“more”選擇需要的語言。如圖所示:
點(diǎn)擊more之后,進(jìn)入下一級菜單,在該菜單中選擇語言格式為UTF-8。如圖所示:
選擇完成之后文件的編碼格式變?yōu)閁TF-8,如果再次需要更改直接點(diǎn)擊這個語言即可。文件編碼格式也就切換完成。
Android原生編解碼接口 MediaCodec 之——完全解析
MediaCodec 是Android 4.1(api 16)版本引入的編解碼接口, Developer 官網(wǎng) 上描述的已經(jīng)很清楚了??梢耘浜?中文翻譯 一起看。理解更深刻。
MediaCodec的工作流程:
從上圖可以看出 MediaCodec 架構(gòu)上采用了2個緩沖區(qū)隊列,異步處理數(shù)據(jù),并且使用了一組輸入輸出緩存。
你請求或接收到一個空的輸入緩存(input buffer),向其中填充滿數(shù)據(jù)并將它傳遞給編解碼器處理。編解碼器處理完這些數(shù)據(jù)并將處理結(jié)果輸出至一個空的輸出緩存(output buffer)中。最終,你請求或接收到一個填充了結(jié)果數(shù)據(jù)的輸出緩存(output buffer),使用完其中的數(shù)據(jù),并將其釋放給編解碼器再次使用。
具體工作如下:
MediaCodec的基本調(diào)用流程是:
1.初始化MediaCodec,方法有兩種,分別是通過名稱和類型來創(chuàng)建,對應(yīng)的方法為:
2.配置編碼器,設(shè)置各種編碼器參數(shù)(MediaFormat),這個類包含了比特率、幀率、關(guān)鍵幀間隔時間等。然后再調(diào)用 mMediaCodec .configure,對于 API 19 以上的系統(tǒng),我們可以選擇 Surface 輸入:mMediaCodec .createInputSurface,
3.打開編碼器,獲取輸入輸出緩沖區(qū)
獲取輸入輸出緩沖區(qū)在api19 上是以上方式獲取,api21以后 可以使用直接獲取ByteBuffer
4.輸入數(shù)據(jù),有2種方式,一種是普通輸入,一種是Surface 輸入
普通輸入又可區(qū)分為兩種情況,一種是配合MediaExtractor ,一種是取原數(shù)據(jù);
返回一個填充了有效數(shù)據(jù)的input buffer的索引,如果沒有可用的buffer則返回-1,參數(shù)為超時時間(TIMES_OUT),單位是微秒,當(dāng)timeoutUs==0時,該方法立即返回;當(dāng)timeoutUs0時,無限期地等待一個可用的input buffer,當(dāng)timeoutUs0時,
等待時間為傳入的微秒值。
上面輸入緩存的index,通過getInputBuffers()得到的是輸入緩存數(shù)組,通過index和輸入緩存數(shù)組可以得到當(dāng)前請求的輸入緩存,在使用之前要clear一下,避免之前的緩存數(shù)據(jù)影響當(dāng)前數(shù)據(jù),接著就是把數(shù)據(jù)添加到輸入緩存中,并調(diào)用queueInputBuffer(...)把緩存數(shù)據(jù)入隊;
5.輸出數(shù)據(jù)
通常編碼傳輸時每個關(guān)鍵幀頭部都需要帶上編碼配置數(shù)據(jù)(PPS,SPS),但 MediaCodec 會在首次輸出時專門輸出編碼配置數(shù)據(jù),后面的關(guān)鍵幀里是不攜帶這些數(shù)據(jù)的,所以需要我們手動做一個拼接;
6.使用完MediaCodec后釋放資源
要告知編碼器我們要結(jié)束編碼,Surface 輸入的話調(diào)用 mMediaCodec .signalEndOfInputStream,普通輸入則可以為在 queueInputBuffer 時指定 MediaCodec.BUFFER_FLAG_END_OF_STREAM 這個 flag;告知編碼器后我們就可以等到編碼器輸出的 buffer 帶著 MediaCodec.BUFFER_FLAG_END_OF_STREAM 這個 flag 了,等到之后我們調(diào)用 mMediaCodec .release 銷毀編碼器
流控就是流量控制。 為什么要控制,就是為了在一定的限制條件下,收益最大化!
涉及到了 TCP 和視頻編碼:
對 TCP 來說就是控制單位時間內(nèi)發(fā)送數(shù)據(jù)包的數(shù)據(jù)量,對編碼來說就是控制單位時間內(nèi)輸出數(shù)據(jù)的數(shù)據(jù)量。
TCP 的限制條件是網(wǎng)絡(luò)帶寬,流控就是在避免造成或者加劇網(wǎng)絡(luò)擁塞的前提下,盡可能利用網(wǎng)絡(luò)帶寬。帶寬夠、網(wǎng)絡(luò)好,我們就加快速度發(fā)送數(shù)據(jù)包,出現(xiàn)了延遲增大、丟包之后,就放慢發(fā)包的速度(因為繼續(xù)高速發(fā)包,可能會加劇網(wǎng)絡(luò)擁塞,反而發(fā)得更慢)。
視頻編碼的限制條件最初是解碼器的能力,碼率太高就會無法解碼,后來隨著 codec 的發(fā)展,解碼能力不再是瓶頸,限制條件變成了傳輸帶寬/文件大小,我們希望在控制數(shù)據(jù)量的前提下,畫面質(zhì)量盡可能高。
一般編碼器都可以設(shè)置一個目標(biāo)碼率,但編碼器的實(shí)際輸出碼率不會完全符合設(shè)置,因為在編碼過程中實(shí)際可以控制的并不是最終輸出的碼率,而是編碼過程中的一個量化參數(shù)(Quantization Parameter,QP),它和碼率并沒有固定的關(guān)系,而是取決于圖像內(nèi)容。 這一點(diǎn)不在這里展開,感興趣的朋友可以閱讀視頻壓縮編碼和音頻壓縮編碼的基本原理。
無論是要發(fā)送的 TCP 數(shù)據(jù)包,還是要編碼的圖像,都可能出現(xiàn)“尖峰”,也就是短時間內(nèi)出現(xiàn)較大的數(shù)據(jù)量。TCP 面對尖峰,可以選擇不為所動(尤其是網(wǎng)絡(luò)已經(jīng)擁塞的時候),這沒有太大的問題,但如果視頻編碼也對尖峰不為所動,那圖像質(zhì)量就會大打折扣了。如果有幾幀數(shù)據(jù)量特別大,但仍要把碼率控制在原來的水平,那勢必要損失更多的信息,因此圖像失真就會更嚴(yán)重。 這種情況通常的表現(xiàn)是畫面出現(xiàn)很多小方塊,看上去像是打了馬賽克一樣,導(dǎo)致畫面的局部或者整體看不清楚的情況
配置時指定目標(biāo)碼率和碼率控制模式:
碼率控制模式有三種:
碼率控制模式在 MediaCodecInfo.EncoderCapabilities 類中定義了三種,在 framework 層有另一套名字和它們的值一一對應(yīng):
動態(tài)調(diào)整目標(biāo)碼率:
Android 流控策略選擇
下面展示使用MediaExtractor獲取數(shù)據(jù)后,用MediaMuxer重新寫成一個MP4文件的簡單栗子
當(dāng)前標(biāo)題:android編碼,Android編碼格式
路徑分享:http://www.dlmjj.cn/article/dsejcec.html