真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios核心開(kāi)發(fā)手冊(cè),ios核心開(kāi)發(fā)手冊(cè)是什么

【iOS】FFMpeg SDK 開(kāi)發(fā)手冊(cè)

FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多codec都是從頭開(kāi)發(fā)的。

在留壩等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營(yíng)銷(xiāo)型網(wǎng)站,外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),留壩網(wǎng)站建設(shè)費(fèi)用合理。

FFmpeg在Linux平臺(tái)下開(kāi)發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個(gè)項(xiàng)目最早由Fabrice Bellard發(fā)起,現(xiàn)在由Michael Niedermayer維護(hù)。許多FFmpeg的開(kāi)發(fā)人員都來(lái)自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱(chēng)來(lái)自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。

libavformat:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能;

libavcodec:用于各種類(lèi)型聲音/圖像編解碼;

libavutil:包含一些公共的工具函數(shù);

libswscale:用于視頻場(chǎng)景比例縮放、色彩映射轉(zhuǎn)換;

libpostproc:用于后期效果處理;

ffmpeg:該項(xiàng)目提供的一個(gè)工具,可用于格式轉(zhuǎn)換、解碼或電視卡即時(shí)編碼等;

ffsever:一個(gè) HTTP 多媒體即時(shí)廣播串流服務(wù)器;

ffplay:是一個(gè)簡(jiǎn)單的播放器,使用ffmpeg 庫(kù)解析和解碼,通過(guò)SDL顯示;

三種幀的說(shuō)明

I幀:幀內(nèi)編碼幀 ,I幀表示關(guān)鍵幀,你可以理解為這一幀畫(huà)面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾?huà)面)

I幀特點(diǎn):

1.它是一個(gè)全幀壓縮編碼幀。它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸;

2.解碼時(shí)僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像;

3.I幀描述了圖像背景和運(yùn)動(dòng)主體的詳情;

4.I幀不需要參考其他畫(huà)面而生成;

5.I幀是P幀和B幀的參考幀(其質(zhì)量直接影響到同組中以后各幀的質(zhì)量);

6.I幀是幀組GOP的基礎(chǔ)幀(第一幀),在一組中只有一個(gè)I幀;

7.I幀不需要考慮運(yùn)動(dòng)矢量;

8.I幀所占數(shù)據(jù)的信息量比較大。

P幀:前向預(yù)測(cè)編碼幀。P幀表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫(huà)面疊加上本幀定義的差別,生成最終畫(huà)面。(也就是差別幀,P幀沒(méi)有完整畫(huà)面數(shù)據(jù),只有與前一幀的畫(huà)面差別的數(shù)據(jù))

P幀的預(yù)測(cè)與重構(gòu):P幀是以I幀為參考幀,在I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送。在接收端根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值并與差值相加以得到P幀“某點(diǎn)”樣值,從而可得到完整的P幀。

P幀特點(diǎn):

1.P幀是I幀后面相隔1~2幀的編碼幀;

2.P幀采用運(yùn)動(dòng)補(bǔ)償?shù)姆椒▊魉退c前面的I或P幀的差值及運(yùn)動(dòng)矢量(預(yù)測(cè)誤差);

3.解碼時(shí)必須將I幀中的預(yù)測(cè)值與預(yù)測(cè)誤差求和后才能重構(gòu)完整的P幀圖像;

4.P幀屬于前向預(yù)測(cè)的幀間編碼。它只參考前面最靠近它的I幀或P幀;

5.P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀;

6.由于P幀是參考幀,它可能造成解碼錯(cuò)誤的擴(kuò)散;

7.由于是差值傳送,P幀的壓縮比較高。

B幀:雙向預(yù)測(cè)內(nèi)插編碼幀。B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜,有4種情況,但我這樣說(shuō)簡(jiǎn)單些),換言之,要解碼B幀,不僅要取得之前的緩存畫(huà)面,還要解碼之后的畫(huà)面,通過(guò)前后畫(huà)面的與本幀數(shù)據(jù)的疊加取得最終的畫(huà)面。B幀壓縮率高,但是解碼時(shí)CPU會(huì)比較累。

B幀的預(yù)測(cè)與重構(gòu)

B幀以前面的I或P幀和后面的P幀為參考幀,“找出”B幀“某點(diǎn)”的預(yù)測(cè)值和兩個(gè)運(yùn)動(dòng)矢量,并取預(yù)測(cè)差值和運(yùn)動(dòng)矢量傳送。接收端根據(jù)運(yùn)動(dòng)矢量在兩個(gè)參考幀中“找出(算出)”預(yù)測(cè)值并與差值求和,得到B幀“某點(diǎn)”樣值,從而可得到完整的B幀。

B幀特點(diǎn)

1.B幀是由前面的I或P幀和后面的P幀來(lái)進(jìn)行預(yù)測(cè)的;

2.B幀傳送的是它與前面的I或P幀和后面的P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量;

3.B幀是雙向預(yù)測(cè)編碼幀;

4.B幀壓縮比最高,因?yàn)樗环从潮麉⒖紟g運(yùn)動(dòng)主體的變化情況,預(yù)測(cè)比較準(zhǔn)確;

5.B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散。

注:I、B、P各幀是根據(jù)壓縮算法的需要,是人為定義的,它們都是實(shí)實(shí)在在的物理幀。一般來(lái)說(shuō),I幀的壓縮率是7(跟JPG差不多),P幀是20,B幀可以達(dá)到50??梢?jiàn)使用B幀能節(jié)省大量空間,節(jié)省出來(lái)的空間可以用來(lái)保存多一些I幀,這樣在相同碼率下,可以提供更好的畫(huà)質(zhì)。

1.分組:把幾幀圖像分為一組(GOP,也就是一個(gè)序列),為防止運(yùn)動(dòng)變化,幀數(shù)不宜取多。

2.定義幀:將每組內(nèi)各幀圖像定義為三種類(lèi)型,即I幀、B幀和P幀;

3.預(yù)測(cè)幀:以I幀做為基礎(chǔ)幀,以I幀預(yù)測(cè)P幀,再由I幀和P幀預(yù)測(cè)B幀;

4.數(shù)據(jù)傳輸:最后將I幀數(shù)據(jù)與預(yù)測(cè)的差值信息進(jìn)行存儲(chǔ)和傳輸。幀內(nèi)(Intraframe)壓縮也稱(chēng)為空間壓縮(Spatial compression)。當(dāng)壓縮一幀圖像時(shí),僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息,這實(shí)際上與靜態(tài)圖像壓縮類(lèi)似。幀內(nèi)一般采用有損壓縮算法,由于幀內(nèi)壓縮是編碼一個(gè)完整的圖像,所以可以獨(dú)立的解碼、顯示。幀內(nèi)壓縮一般達(dá)不到很高的壓縮,跟編碼jpeg差不多。

幀間(Interframe)壓縮的原理是:相鄰幾幀的數(shù)據(jù)有很大的相關(guān)性,或者說(shuō)前后兩幀信息變化很小的特點(diǎn)。也即連續(xù)的視頻其相鄰幀之間具有冗余信息,根據(jù)這一特性,壓縮相鄰幀之間的冗余量就可以進(jìn)一步提高壓縮量,減小壓縮比。幀間壓縮也稱(chēng)為時(shí)間壓縮(Temporal compression),它通過(guò)比較時(shí)間軸上不同幀之間的數(shù)據(jù)進(jìn)行壓縮。幀間壓縮一般是無(wú)損的。幀差值(Frame differencing)算法是一種典型的時(shí)間壓縮法,它通過(guò)比較本幀與相鄰幀之間的差異,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數(shù)據(jù)量。

順便說(shuō)下有損(Lossy )壓縮和無(wú)損(Lossy less)壓縮。無(wú)損壓縮也即壓縮前和解壓縮后的數(shù)據(jù)完全一致。多數(shù)的無(wú)損壓縮都采用RLE行程編碼算法。有損壓縮意味著解壓縮后的數(shù)據(jù)與壓縮前的數(shù)據(jù)不一致。在壓縮的過(guò)程中要丟失一些人眼和人耳所不敏感的圖像或音頻信息,而且丟失的信息不可恢復(fù)。幾乎所有高壓縮的算法都采用有損壓縮,這樣才能達(dá)到低數(shù)據(jù)率的目標(biāo)。丟失的數(shù)據(jù)率與壓縮比有關(guān),壓縮比越小,丟失的數(shù)據(jù)越多,解壓縮后的效果一般越差。此外,某些有損壓縮算法采用多次重復(fù)壓縮的方式,這樣還會(huì)引起額外的數(shù)據(jù)丟失。

如果NALU對(duì)應(yīng)的Slice為一幀的開(kāi)始,則用4字節(jié)表示,即0x00000001;否則用3字節(jié)表示,0x000001。

NAL Header:forbidden_bit,nal_reference_bit(優(yōu)先級(jí))2bit,nal_unit_type(類(lèi)型)5bit。 標(biāo)識(shí)NAL單元中的RBSP數(shù)據(jù)類(lèi)型,其中,nal_unit_type為1, 2, 3, 4, 5的NAL單元稱(chēng)為VCL的NAL單元,其他類(lèi)型的NAL單元為非VCL的NAL單元。

0:未規(guī)定

1:非IDR圖像中不采用數(shù)據(jù)劃分的片段

2:非IDR圖像中A類(lèi)數(shù)據(jù)劃分片段

3:非IDR圖像中B類(lèi)數(shù)據(jù)劃分片段

4:非IDR圖像中C類(lèi)數(shù)據(jù)劃分片段

5:IDR圖像的片段

6:補(bǔ)充增強(qiáng)信息(SEI)

7:序列參數(shù)集(SPS)

8:圖像參數(shù)集(PPS)

9:分割符

10:序列結(jié)束符

11:流結(jié)束符

12:填充數(shù)據(jù)

13:序列參數(shù)集擴(kuò)展

14:帶前綴的NAL單元

15:子序列參數(shù)集

16 – 18:保留

19:不采用數(shù)據(jù)劃分的輔助編碼圖像片段

20:編碼片段擴(kuò)展

21 – 23:保留

24 – 31:未規(guī)定

H.264的SPS和PPS串,包含了初始化H.264解碼器所需要的信息參數(shù),包括編碼所用的profile,level,圖像的寬和高,deblock濾波器等。

碼率:256~512 kb/s

幀率:15~20fps

分辨率:1280x720(HD) 640x368(VGA) 1920x1080(UHD)

中文名:高級(jí)音頻編碼,出現(xiàn)于1997年,基于MPEG-2的音頻編碼技術(shù)。由Fraunhofer IIS、杜比實(shí)驗(yàn)室、ATT、Sony等公司共同開(kāi)發(fā),目的是取代MP3格式。2000年,MPEG-4標(biāo)準(zhǔn)出現(xiàn)后,AAC重新集成了其特性,加入了SBR技術(shù)和PS技術(shù),為了區(qū)別于傳統(tǒng)的MPEG-2 AAC又稱(chēng)為MPEG-4 AAC。

優(yōu)點(diǎn):相對(duì)于mp3,AAC格式的音質(zhì)更佳,文件更小。

不足:AAC屬于有損壓縮的格式,與時(shí)下流行的APE、FLAC等無(wú)損格式相比音質(zhì)存在“本質(zhì)上”的差距。加之,傳輸速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC頭上“小巧”的光環(huán)不復(fù)存在了。

音頻采樣率是指錄音設(shè)備在一秒鐘內(nèi)對(duì)聲音信號(hào)的采樣次數(shù),采樣頻率越高聲音的還原就越真實(shí)越自然。在當(dāng)今的主流采集卡上,采樣頻率一般共分為22.05KHz、44.1KHz、48KHz三個(gè)等級(jí),22.05KHz只能達(dá)到FM廣播的聲音品質(zhì),44.1KHz則是理論上的CD音質(zhì)界限,48KHz則更加精確一些。

比特率是指每秒傳送的比特(bit)數(shù)。單位為 bps(Bit Per Second),比特率越高,傳送數(shù)據(jù)速度越快。聲音中的比特率是指將模擬聲音信號(hào)轉(zhuǎn)換成數(shù)字聲音信號(hào)后,單位時(shí)間內(nèi)的二進(jìn)制數(shù)據(jù)量,是間接衡量音頻質(zhì)量的一個(gè)指標(biāo)。 視頻中的比特率(碼率)原理與聲音中的相同,都是指由模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)后,單位時(shí)間內(nèi)的二進(jìn)制數(shù)據(jù)量。

信道編碼中,K符號(hào)大小的信源數(shù)據(jù)塊通過(guò)編碼映射為N符號(hào)大小的碼字,則K/N成為碼率,其中假設(shè)編碼前后的符號(hào)表沒(méi)有變化。

FFMPEG中結(jié)構(gòu)體很多。最關(guān)鍵的結(jié)構(gòu)體可以分成以下幾類(lèi):

解協(xié)議(http,rtsp,rtmp,mms)

AVIOContext,URLProtocol,URLContext主要存儲(chǔ)視音頻使用的協(xié)議的類(lèi)型以及狀態(tài)。URLProtocol存儲(chǔ)輸入視音頻使用的封裝格式。每種協(xié)議都對(duì)應(yīng)一個(gè)URLProtocol結(jié)構(gòu)。(注意:FFMPEG中文件也被當(dāng)做一種協(xié)議“file”)

解封裝(flv,avi,rmvb,mp4)

AVFormatContext主要存儲(chǔ)視音頻封裝格式中包含的信息;AVInputFormat存儲(chǔ)輸入視音頻使用的封裝格式。每種視音頻封裝格式都對(duì)應(yīng)一個(gè)AVInputFormat 結(jié)構(gòu)。

解碼(h264,mpeg2,aac,mp3)

每個(gè)AVStream存儲(chǔ)一個(gè)視頻/音頻流的相關(guān)數(shù)據(jù);每個(gè)AVStream對(duì)應(yīng)一個(gè)AVCodecContext,存儲(chǔ)該視頻/音頻流使用解碼方式的相關(guān)數(shù)據(jù);每個(gè)AVCodecContext中對(duì)應(yīng)一個(gè)AVCodec,包含該視頻/音頻對(duì)應(yīng)的解碼器。每種解碼器都對(duì)應(yīng)一個(gè)AVCodec結(jié)構(gòu)。

存數(shù)據(jù)

視頻的話(huà),每個(gè)結(jié)構(gòu)一般是存一幀;音頻可能有好幾幀

解碼前數(shù)據(jù):AVPacket

解碼后數(shù)據(jù):AVFrame

AVCodec是存儲(chǔ)編解碼器信息的結(jié)構(gòu)體

const char *name:編解碼器的名字,比較短

const char *long_name:編解碼器的名字,全稱(chēng),比較長(zhǎng)

enum AVMediaType type:指明了類(lèi)型,是視頻,音頻,還是字幕

enum AVCodecID id:ID,不重復(fù)

const AVRational *supported_framerates:支持的幀率(僅視頻)

const enum AVPixelFormat *pix_fmts:支持的像素格式(僅視頻)

const int *supported_samplerates:支持的采樣率(僅音頻)

const enum AVSampleFormat *sample_fmts:支持的采樣格式(僅音頻)

const uint64_t channel_layouts:支持的聲道數(shù)(僅音頻)

int priv_data_size:私有數(shù)據(jù)的大小

1.注冊(cè)所有編解碼器:av_register_all();

2.聲明一個(gè)AVCodec類(lèi)型的指針,比如說(shuō)AVCodec first_c;

3.調(diào)用av_codec_next()函數(shù),即可獲得指向鏈表下一個(gè)解碼器的指針,循環(huán)往復(fù)可以獲得所有解碼器的信息。注意,如果想要獲得指向第一個(gè)解碼器的指針,則需要將該函數(shù)的參數(shù)設(shè)置為NULL。

這是一個(gè)描述編解碼器上下文的數(shù)據(jù)結(jié)構(gòu),包含了眾多編解碼器需要的參數(shù)信息

如果是單純使用libavcodec,這部分信息需要調(diào)用者進(jìn)行初始化;如果是使用整個(gè)FFMPEG庫(kù),這部分信息在調(diào)用 av_open_input_file和av_find_stream_info的過(guò)程中根據(jù)文件的頭信息及媒體流內(nèi)的頭部信息完成初始化。其中幾個(gè)主要 域的釋義如下:

extradata/extradata_size: 這個(gè)buffer中存放了解碼器可能會(huì)用到的額外信息,在av_read_frame中填充。一般來(lái)說(shuō),首先,某種具體格式的demuxer在讀取格式頭 信息的時(shí)候會(huì)填充extradata,其次,如果demuxer沒(méi)有做這個(gè)事情,比如可能在頭部壓根兒就沒(méi)有相關(guān)的編解碼信息,則相應(yīng)的parser會(huì)繼 續(xù)從已經(jīng)解復(fù)用出來(lái)的媒體流中繼續(xù)尋找。在沒(méi)有找到任何額外信息的情況下,這個(gè)buffer指針為空。

time_base:

width/height:視頻的寬和高。

sample_rate/channels:音頻的采樣率和信道數(shù)目。

sample_fmt: 音頻的原始采樣格式。

codec_name/codec_type/codec_id/codec_tag:編解碼器的信息。

該結(jié)構(gòu)體描述一個(gè)媒體流

主要域的釋義如下,其中大部分域的值可以由av_open_input_file根據(jù)文件頭的信息確定,缺少的信息需要通過(guò)調(diào)用av_find_stream_info讀幀及軟解碼進(jìn)一步獲取:

index/id:index對(duì)應(yīng)流的索引,這個(gè)數(shù)字是自動(dòng)生成的,根據(jù)index可以從AVFormatContext::streams表中索引到該流;而id則是流的標(biāo)識(shí),依賴(lài)于具體的容器格式。比如對(duì)于MPEG TS格式,id就是pid。

time_base:流的時(shí)間基準(zhǔn),是一個(gè)實(shí)數(shù),該流中媒體數(shù)據(jù)的pts和dts都將以這個(gè)時(shí)間基準(zhǔn)為粒度。通常,使用av_rescale/av_rescale_q可以實(shí)現(xiàn)不同時(shí)間基準(zhǔn)的轉(zhuǎn)換。

start_time:流的起始時(shí)間,以流的時(shí)間基準(zhǔn)為單位,通常是該流中第一個(gè)幀的pts。

duration:流的總時(shí)間,以流的時(shí)間基準(zhǔn)為單位。

need_parsing:對(duì)該流parsing過(guò)程的控制域。

nb_frames:流內(nèi)的幀數(shù)目。

r_frame_rate/framerate/avg_frame_rate:幀率相關(guān)。

codec:指向該流對(duì)應(yīng)的AVCodecContext結(jié)構(gòu),調(diào)用av_open_input_file時(shí)生成。

parser:指向該流對(duì)應(yīng)的AVCodecParserContext結(jié)構(gòu),調(diào)用av_find_stream_info時(shí)生成。

這個(gè)結(jié)構(gòu)體描述了一個(gè)媒體文件或媒體流的構(gòu)成和基本信息

這是FFMpeg中最為基本的一個(gè)結(jié)構(gòu),是其他所有結(jié)構(gòu)的根,是一個(gè)多媒體文件或流的根本抽象。其中:nb_streams和streams所表示的AVStream結(jié)構(gòu)指針數(shù)組包含了所有內(nèi)嵌媒體流的描述;iformat和oformat指向?qū)?yīng)的demuxer和muxer指針;pb則指向一個(gè)控制底層數(shù)據(jù)讀寫(xiě)的ByteIOContext結(jié)構(gòu)。

start_time和duration是從streams數(shù)組的各個(gè)AVStream中推斷出的多媒體文件的起始時(shí)間和長(zhǎng)度,以微妙為單位。

通常,這個(gè)結(jié)構(gòu)由av_open_input_file在內(nèi)部創(chuàng)建并以缺省值初始化部分成員。但是,如果調(diào)用者希望自己創(chuàng)建該結(jié)構(gòu),則需要顯式為該結(jié)構(gòu)的一些成員置缺省值——如果沒(méi)有缺省值的話(huà),會(huì)導(dǎo)致之后的動(dòng)作產(chǎn)生異常。以下成員需要被關(guān)注:

probesize

mux_rate

packet_size

flags

max_analyze_duration

key

max_index_size

max_picture_buffer

max_delay

AVPacket定義在avcodec.h中

FFMPEG使用AVPacket來(lái)暫存解復(fù)用之后、解碼之前的媒體數(shù)據(jù)(一個(gè)音/視頻幀、一個(gè)字幕包等)及附加信息(解碼時(shí)間戳、顯示時(shí)間戳、時(shí)長(zhǎng)等)。其中:

dts 表示解碼時(shí)間戳,pts表示顯示時(shí)間戳,它們的單位是所屬媒體流的時(shí)間基準(zhǔn)。

stream_index 給出所屬媒體流的索引;

data 為數(shù)據(jù)緩沖區(qū)指針,size為長(zhǎng)度;

duration 為數(shù)據(jù)的時(shí)長(zhǎng),也是以所屬媒體流的時(shí)間基準(zhǔn)為單位;

pos 表示該數(shù)據(jù)在媒體流中的字節(jié)偏移量;

destruct 為用于釋放數(shù)據(jù)緩沖區(qū)的函數(shù)指針;

flags 為標(biāo)志域,其中,最低為置1表示該數(shù)據(jù)是一個(gè)關(guān)鍵幀。

AVPacket 結(jié)構(gòu)本身只是個(gè)容器,它使用data成員指向?qū)嶋H的數(shù)據(jù)緩沖區(qū),這個(gè)緩沖區(qū)可以通過(guò)av_new_packet創(chuàng)建,可以通過(guò) av_dup_packet 拷貝,也可以由FFMPEG的API產(chǎn)生(如av_read_frame),使用之后需要通過(guò)調(diào)用av_free_packet釋放。

av_free_packet調(diào)用的是結(jié)構(gòu)體本身的destruct函數(shù),它的值有兩種情況:(1)av_destruct_packet_nofree或 0;(2)av_destruct_packet,其中,前者僅僅是將data和size的值清0而已,后者才會(huì)真正地釋放緩沖區(qū)。FFMPEG內(nèi)部使用 AVPacket結(jié)構(gòu)建立緩沖區(qū)裝載數(shù)據(jù),同時(shí)提供destruct函數(shù),如果FFMPEG打算自己維護(hù)緩沖區(qū),則將destruct設(shè)為 av_destruct_packet_nofree,用戶(hù)調(diào)用av_free_packet清理緩沖區(qū)時(shí)并不能夠?qū)⑵溽尫?;如果FFMPEG不會(huì)再使用 該緩沖區(qū),則將destruct設(shè)為av_destruct_packet,表示它能夠被釋放。對(duì)于緩沖區(qū)不能夠被釋放的AVPackt,用戶(hù)在使用之前 最好調(diào)用av_dup_packet進(jìn)行緩沖區(qū)的克隆,將其轉(zhuǎn)化為緩沖區(qū)能夠被釋放的AVPacket,以免對(duì)緩沖區(qū)的不當(dāng)占用造成異常錯(cuò)誤。而 av_dup_packet會(huì)為destruct指針為av_destruct_packet_nofree的AVPacket新建一個(gè)緩沖區(qū),然后將原 緩沖區(qū)的數(shù)據(jù)拷貝至新緩沖區(qū),置data的值為新緩沖區(qū)的地址,同時(shí)設(shè)destruct指針為av_destruct_packet。

構(gòu)體保存的是解碼后和原始的音視頻信息。AVFrame通過(guò)函數(shù)av_frame_alloc()初始化,該函數(shù)僅僅分配AVFrame實(shí)例本身,而沒(méi)有分配其內(nèi)部的緩存。AVFrame實(shí)例由av_frame_free()釋放;AVFrame實(shí)例通常分配一次,重復(fù)使用,如分配一個(gè)AVFrame實(shí)例來(lái)保留解碼器中輸出的視頻幀(此時(shí)應(yīng)在恰當(dāng)?shù)臅r(shí)候使用av_frame_unref()清理參考幀并將AVFrame歸零)。該類(lèi)所描述的數(shù)據(jù)通常由AVBuffer的API來(lái)保存一個(gè)引用計(jì)數(shù),并保存于AVFrame.buf

/AVFrame.extended_buf,在至少存在一個(gè)參考的時(shí)候(如AVFrame.buf[0] != NULL),則該對(duì)象被標(biāo)記為“被引用”。在此情況下,AVFrame所包含的每一組數(shù)據(jù)必須包含于AVFrame的緩存中。

ADTS流 跟Raw流,

1.ADTS是個(gè)啥

ADTS全稱(chēng)是(Audio Data Transport Stream),是AAC的一種十分常見(jiàn)的傳輸格式。

AAC解碼器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前添加7個(gè)字節(jié)的ADTS header。也就是說(shuō)你可以吧ADTS這個(gè)頭看作是AAC的frameheader。

ffmpeg寫(xiě) mp4+aac時(shí)呢,音頻有兩個(gè)值得注意的地方。

1 寫(xiě)aac音頻時(shí),要添加兩個(gè)字節(jié)的信息到AVCodecContext.

2 ffmpeg 寫(xiě)AAC音頻數(shù)據(jù)不能含有ADTS頭

在AAC ES流前添加7個(gè)字節(jié)的ADTS header。也就是說(shuō)你可以吧ADTS這個(gè)頭看作是AAC的frameheader。

tvOS必須要支持 bitcode. (iOS bitcode項(xiàng)可選的) 所以在編譯的時(shí)候Makefile要加上 CFLAGS= -fembed-bitcode 。 如果用xcode編譯lib,要在Build Settings—custom compiler flags —cflags 加上OTHER_CFLAGS="-fembed-bitcode" 。

1 內(nèi)存優(yōu)化。內(nèi)存往上漲。沒(méi)能及時(shí)回收。最好能夠使用手動(dòng)管理內(nèi)存。

解碼優(yōu)化,看ffmpeg文檔,最新的解碼庫(kù),解碼效率,穩(wěn)定性,綜合性考慮。

YUV-RGB OpenGLES shader來(lái)顯示。

1.分離視頻音頻流

ffmpeg -i input_file -vcodec copy -an output_file_video//分離視頻流

ffmpeg -i input_file -acodec copy -vn output_file_audio//分離音頻流

2.視頻解復(fù)用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264

ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.視頻轉(zhuǎn)碼

ffmpeg –i test.mp4 –vcodec h264 –s 352 278 –an –f m4v test.264 //轉(zhuǎn)碼為碼流原始文件

ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352 278 –an –f m4v test.264 //轉(zhuǎn)碼為碼流原始文件

ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //轉(zhuǎn)碼為封裝文件

//-bf B幀數(shù)目控制,-g 關(guān)鍵幀間隔控制,-s 分辨率控制

4.視頻封裝

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.視頻剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取圖片

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切視頻

//-r 提取圖像的頻率,-ss 開(kāi)始時(shí)間,-t 持續(xù)時(shí)間

6.視頻錄制

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列轉(zhuǎn)AVI

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

APP設(shè)計(jì)稿是750*1334的的界面,輸出切圖@1x,2x,3x的是什么尺寸

我本身是一名GUI設(shè)計(jì)師,所以我只站在GUI設(shè)計(jì)師的角度去把APP從項(xiàng)目啟動(dòng)到切片輸出的過(guò)程寫(xiě)一寫(xiě),相當(dāng)于工作流程的介紹吧。公司不同,流程不盡相同,但是終究還是能有些幫助。依舊聲明:這里寫(xiě)的不是一種規(guī)范,只是一種工作方法,大家在具體工作中,一定要靈活運(yùn)用。另外,技術(shù)的更新是非常快的,我寫(xiě)的這些可能某些東西已經(jīng)和你們的工程師搭檔所用的方法不一樣了,所以,還是要靈活運(yùn)用~這里我們只說(shuō)IOS系統(tǒng)下的設(shè)計(jì),至于Android,因?yàn)槌叽缣?,涉及的東西比較亂,我整理好以后再說(shuō)吧。頁(yè)面篇幅比較長(zhǎng),不推薦一次性看完,那樣你潛意識(shí)里就會(huì)對(duì)它厭煩了,所以可以有時(shí)間讀一讀,看一看。Part 1 項(xiàng)目立項(xiàng)完善的公司會(huì)把項(xiàng)目相關(guān)人員聚集起來(lái),產(chǎn)品經(jīng)理會(huì)把產(chǎn)品詳細(xì)的用原型展示出來(lái),包括產(chǎn)品定位,市場(chǎng)需求,主打賣(mài)點(diǎn),產(chǎn)品性質(zhì)以及各模塊具體功能,邏輯跳轉(zhuǎn)演示一下;之后會(huì)評(píng)估項(xiàng)目用時(shí),各部門(mén)協(xié)調(diào),項(xiàng)目啟動(dòng)。話(huà)不多說(shuō),接到原型,那我們應(yīng)該做什么準(zhǔn)備工作呢?在項(xiàng)目設(shè)計(jì)之初,就該進(jìn)行項(xiàng)目歸檔整理,我的習(xí)慣是“項(xiàng)目名稱(chēng)+版本序列”;沒(méi)有最正確的工作方法,只有最適合自己的工作習(xí)慣。我個(gè)人習(xí)慣把不同類(lèi)型的文件劃分到不同類(lèi)型的文件夾里,有的設(shè)計(jì)師習(xí)慣全都放在一個(gè)文件夾里,如果文件少還說(shuō)的過(guò)去,如果頁(yè)面過(guò)多,就知道這樣的利弊了。工欲善其事必先利其器,基本上我做界面設(shè)計(jì)用的最多的就是PS和AI了,版本無(wú)所謂,用著舒服就行,推薦版本高一點(diǎn)的,低版本好多方便功能都沒(méi)有。標(biāo)注工具:PxCook,目前我還沒(méi)用上Mac,所以也不知道傳說(shuō)中的Sketch到底多神奇。PxCook在Windows上標(biāo)注還比較順手,雖然它還附帶切圖功能,但是比較雞肋,不推薦用它切圖。切圖工具:Cutterman官網(wǎng)地址: /一款PS的插件,切圖非常方便,但不支持綠色免安裝版本PS,而且對(duì)PS版本要求比較高,針對(duì)CS 6的已經(jīng)不維護(hù)更新了。推薦安裝官方完整版PS cc,然后自行破解。官網(wǎng)上有安裝使用教程,自己研究下吧,因?yàn)槲乙彩亲罱砰_(kāi)始接觸這款插件。Assistor PS也是一款PS的切圖標(biāo)注插件,也被譽(yù)為神器;我使用了下,感覺(jué)相當(dāng)不錯(cuò),就是標(biāo)注還沒(méi)太適應(yīng),推薦一下這個(gè)。Part 2 Photoshop現(xiàn)在常用的幾種設(shè)計(jì)尺寸1. 640*960 4時(shí)代的尺寸,剛接觸APP設(shè)計(jì)用的是這個(gè)尺寸,擬物盛行的時(shí)代(現(xiàn)在用這個(gè)尺寸設(shè)計(jì)的應(yīng)該比較少了吧);2. 640*1136 5/5S/5C,IPhone更新,咱們?cè)O(shè)計(jì)也得跟著與時(shí)俱進(jìn)(應(yīng)該還有人用這個(gè)設(shè)計(jì)尺寸),進(jìn)入扁平的時(shí)代了;3. 750*1334 6 目前我做設(shè)計(jì)稿的設(shè)計(jì)尺寸,IPhone6的尺寸,向下可以適配4,5,向上可以適配6 plus;我記得IP6推出后,我問(wèn)總監(jiān)應(yīng)該用什么尺寸設(shè)計(jì),他說(shuō)用IP6的吧,好適配,切出來(lái)就是@2x了,改一改上下都能照顧到。推薦做設(shè)計(jì)稿的時(shí)候使用IPhone6的尺寸進(jìn)行設(shè)計(jì)。IP 6的尺寸相比于IP 5來(lái)說(shuō),很多系統(tǒng)控件尺寸并未變化,只是高度也就是內(nèi)容顯示區(qū)域發(fā)生了變化。下面是IPhone 6的空白文檔,我建立了參考線(xiàn)。文檔建立之初就設(shè)置好參考線(xiàn)是個(gè)很好的工作習(xí)慣,我希望更多的設(shè)計(jì)師可以養(yǎng)成更好的工作習(xí)慣。上下的參考線(xiàn)很容易設(shè)置,因?yàn)槭歉鶕?jù)IPhone自身系統(tǒng)設(shè)置的,左右的參考線(xiàn)我習(xí)慣設(shè)置為24px,也就是顯示內(nèi)容距離邊框的距離。這不是絕對(duì)的,我和總監(jiān)研究過(guò),究竟是設(shè)置為左右30px還是24px比較好,通過(guò)對(duì)國(guó)內(nèi)國(guó)外各種APP的對(duì)比,覺(jué)得24px更適合一些,不寬不窄,這個(gè)完全是設(shè)計(jì)師個(gè)人的設(shè)計(jì)習(xí)慣,所以不要當(dāng)成什么規(guī)范,確切的說(shuō),整個(gè)屏幕你都可以隨便做,但是我們這里說(shuō)的是正常頁(yè)面。Part 3 頁(yè)面標(biāo)注標(biāo)注是重中之重,工程師能不能完整的還原設(shè)計(jì)稿,很大一部分取決于標(biāo)注;如果不清楚你該怎么標(biāo),一定要和工程師溝通!每個(gè)工程師實(shí)現(xiàn)效果的方法不同,我在這里所說(shuō)的,是我的標(biāo)注習(xí)慣,但應(yīng)該適用于大部分的設(shè)計(jì)師和工程師。不需要每一張效果圖都進(jìn)行標(biāo)注,你標(biāo)注的頁(yè)面能保證工程師開(kāi)發(fā)每個(gè)頁(yè)面的時(shí)候都能順利進(jìn)行即可;這里的標(biāo)注軟件使用的是PxCook,先標(biāo)一個(gè)空白文檔,看看都需要什么吧這里要說(shuō)一句,PxCook雖然可以自動(dòng)讀取顏色,但是還不能對(duì)PSD文檔里設(shè)置的透明度讀取,所以如果你用了透明色,推薦你用文字標(biāo)注直接寫(xiě)出來(lái)原色值以及透明度?;旧衔也⒉皇褂肞XCook里面的顏色標(biāo)注工具,而是使用文字標(biāo)注工具,因?yàn)橐獦?biāo)識(shí)兩種色值,PxCook只能顯示一種色值。一般我的習(xí)慣是PS和標(biāo)注軟件同時(shí)打開(kāi),因?yàn)橛袝r(shí)候標(biāo)注軟件并不能完全的把PSD文件里的東西標(biāo)注出來(lái),所以標(biāo)注也要靈活運(yùn)用,如果無(wú)法標(biāo)注,就到PS里查看一下,然后再使用文字標(biāo)注說(shuō)明一下。標(biāo)注顏色是使用16進(jìn)制,還是RGB:都用得到,要看實(shí)現(xiàn)什么東西,建議標(biāo)注顏色時(shí),兩種色值表達(dá)都標(biāo)上(16進(jìn)制RGB)。你需要標(biāo)注的內(nèi)容有:文字需要提供:字體大小(px),字體顏色;頂部標(biāo)題欄的背景色值,透明度;標(biāo)題欄下方以及Tab bar上方其實(shí)有一條分割線(xiàn),需要提供色值;內(nèi)容顯示區(qū)域的背景色(如果是全部頁(yè)面白色,那就和工程師說(shuō)一句就行);底部Tab bar的背景色值。因?yàn)轫?yè)面的種類(lèi)成千上萬(wàn),我想每種頁(yè)面都講一下,但是不現(xiàn)實(shí),希望可以舉一反三。下面的是一個(gè)比較普通的首頁(yè)頁(yè)面,但是基本上一款A(yù)PP中應(yīng)該標(biāo)的元素都有了~一般頁(yè)面你需要標(biāo)注這些地方:所有元素統(tǒng)一距離屏幕最左24px(全局性的數(shù)據(jù)可以直接和工程師溝通,也可以標(biāo)注,推薦標(biāo)注出來(lái))1、標(biāo)題欄:背景色,標(biāo)題欄文字大小,文字顏色(不再贅述);2、Banner:所有撐滿(mǎn)橫屏的大圖,不需要橫向尺寸,把高度標(biāo)出了就可以了;3、菜單圖標(biāo):圖標(biāo)的大小和圖標(biāo)的可點(diǎn)擊區(qū)域不一定一致也就是說(shuō),圖標(biāo)可以做的很小,但是為了保證點(diǎn)擊的準(zhǔn)確性和流暢性,工程師可以把可點(diǎn)擊區(qū)域設(shè)置的很大,這樣標(biāo)注和切圖的時(shí)候就要注意,標(biāo)注的是可點(diǎn)擊區(qū)域的大小,切圖切的也是可點(diǎn)擊區(qū)域的大小,也就是用透明區(qū)域去補(bǔ)上,否則圖片會(huì)模糊。在設(shè)計(jì)的時(shí)候就要考慮可點(diǎn)擊區(qū)域的范圍,比如X寶購(gòu)物車(chē)頁(yè)面左側(cè)的小圈,可點(diǎn)擊區(qū)域要比實(shí)際小圈尺寸大很多。這種類(lèi)型的圖標(biāo)需要標(biāo)注圖標(biāo)點(diǎn)擊區(qū)域大小,圖標(biāo)距離屏幕最左最右以及上下的距離。至于圖標(biāo)的間距,因?yàn)橛行r(shí)候可能 設(shè)計(jì)師不能完全做到1px不差,所以我基本不標(biāo),交給工程師讓他們?nèi)ヌ幚恚鋵?shí)等距排列的圖標(biāo)不需要標(biāo)間距,因?yàn)楣こ處熯€要?jiǎng)討B(tài)適應(yīng)不同的屏幕,標(biāo)了間距也是白標(biāo)(還是要和你的搭檔溝通怎么去標(biāo)注);4、模塊間隔:這個(gè)位置其實(shí)不是太重要,我習(xí)慣標(biāo)注上這里,麻煩能少則少。5、圖片+文字:這個(gè)應(yīng)該比較常見(jiàn),只標(biāo)注一個(gè)單位(圖+文)就可以了。圖片需要標(biāo)注寬高,因?yàn)楣こ處熞O(shè)置圖片區(qū)域,從后臺(tái)調(diào)取,可以這么說(shuō),軟件里除了橫屏撐滿(mǎn)的圖,基本上所有的圖片都要標(biāo)注寬高。圖片距離上下左右的距離,文字大小顏色,這里的文字其實(shí)算兩個(gè)控件,標(biāo)題文字以及說(shuō)明文字,需要單獨(dú)標(biāo)出。Tab Bar:這個(gè)位置其實(shí)比較特殊,你可以單獨(dú)標(biāo)注圖標(biāo)大小+文字大小;還可以圖標(biāo)文字算作一個(gè)控件,整個(gè)切出來(lái);我們工程師的習(xí)慣是用整個(gè)的,也就是圖標(biāo)+文字算作一個(gè)ICON,所以我基本不怎么標(biāo)注單獨(dú)的圖標(biāo)(這里可以和你的搭檔去溝通一下,看他是什么開(kāi)發(fā)習(xí)慣)。關(guān)于列表頁(yè)類(lèi)型的標(biāo)注問(wèn)題普通的列表有兩種方法(去問(wèn)你的搭檔,他喜歡用什么方法):標(biāo)出行高,行內(nèi)元素居中;標(biāo)出行內(nèi)元素,元素上下間距,確定行高;每種元素的位置如何確定:通常標(biāo)注的都是元素距離屏幕最左側(cè)的距離,比如上圖的圖標(biāo)元素距離左側(cè)24px,文字元素距離左側(cè)100px。標(biāo)注這個(gè)東西沒(méi)有固定的方法,工程師的開(kāi)發(fā)習(xí)慣不同,標(biāo)注方法也不同。該怎么標(biāo)注雖然可以在網(wǎng)上找到方法,但那不一定適合你,一定和自己的搭檔勤溝通,方法是死的,人是活的……所有的頁(yè)面標(biāo)注總結(jié)起來(lái)就是:標(biāo)文字,標(biāo)圖片,標(biāo)間距,標(biāo)區(qū)域;(上述圖標(biāo)出現(xiàn)了45px的單數(shù),因?yàn)檐浖詣?dòng)吸附上去了顯示了圖標(biāo)本身的尺寸,切圖的時(shí)候記得輸出個(gè)偶數(shù)尺寸的切片)Part 4 切片資源的輸出切之前務(wù)必要和你的工程師搭檔溝通一下,該如何去切才能配合他的開(kāi)發(fā)。全局性的切圖常見(jiàn)問(wèn)題① 你的所有設(shè)計(jì)尺寸,包括圖形效果,應(yīng)該盡量使用偶數(shù)。技術(shù)開(kāi)發(fā)使用的尺寸是設(shè)計(jì)稿像素尺寸的一半,也就是說(shuō),如果你用24px的字體,技術(shù)那邊就是設(shè)置為12px;所以標(biāo)注的時(shí)候務(wù)必使用偶數(shù),為了保證最佳的設(shè)計(jì)效果,避免出現(xiàn)0.5像素的虛邊。② 切圖尺寸應(yīng)該提供幾套?ico_car.png IPhone2G,3G,3GS使用(好像沒(méi)人用這手機(jī)了吧)ico_car@2x.png IPhone4,5,6優(yōu)先加載此尺寸圖片(不是必須使用這個(gè)尺寸,是優(yōu)先加載調(diào)用這個(gè)尺寸)ico_car@3x.png IPhone6 plus使用的尺寸可以簡(jiǎn)單的理解為倍數(shù)關(guān)系(其實(shí)是為了滿(mǎn)足不同分辨率,我覺(jué)得不用過(guò)于深究),如果你使用IPhone 6尺寸做設(shè)計(jì)稿,那么切片輸出就是@2x,縮小2倍就是@1x,擴(kuò)大1.5倍就是@3x了。理論上,為了達(dá)到最好的視覺(jué)效果,你應(yīng)該輸出三套尺寸,推薦輸出三種尺寸的切片資源。我的工程師搭檔要求我給兩套尺寸就可以,也就是@1x @2x的兩種尺寸,因?yàn)槲覀儧](méi)有6 plus的測(cè)試機(jī),所以看不到效果,據(jù)他說(shuō)應(yīng)該不會(huì)太失真,但是為了保證效果,我還是給三套尺寸。另外現(xiàn)在幾乎看不到3GS了,所以需不需要提供一倍圖,還是要和工程師討論一下~@1x @2x @3x是開(kāi)發(fā)工具Xcode軟件需要的UI資源,命好名稱(chēng)后,IOS設(shè)備會(huì)自動(dòng)的選取合適尺寸。③共用資源的圖片,輸出一張就可以類(lèi)似這種重復(fù)的按鈕之類(lèi)的,只要提供一張共用的資源就可以了;上面的文字是技術(shù)寫(xiě)上去的。理論上按照最佳視覺(jué)效果,你應(yīng)該提供多尺寸的圖片;但通常我只提供最大尺寸的一張圖片即可,這一點(diǎn)要和你的搭檔溝通好,卻問(wèn)他需要什么方式。④切片的輸出格式文件→存儲(chǔ)為Web所用格式位圖格式:PNG 24,PNG 8,JPG在JPG和PNG兩種格式圖片大小相差不是很大的情況下,推薦使用PNG;如果圖片大小相差很大,使用JPG。歡迎頁(yè)面,ICON一定要使用PNG格式,在不影響視覺(jué)效果的前提下,可以考慮使用PNG 8;矢量圖格式:PDF,SVGIOS原生支持的兩種矢量圖片格式,但是支持的一般,并不能保證100%把所有圖片效果渲染出來(lái);為了保險(xiǎn)起見(jiàn),我通常不使用這兩種格式,推薦還是使用位圖,如果以后技術(shù)提升,100%支持SVG和PDF這種矢量格式圖,那個(gè)時(shí)候也許不用提供這么多套尺寸了~⑤圖標(biāo)的點(diǎn)擊區(qū)域最小點(diǎn)擊區(qū)域問(wèn)題:IOS人機(jī)指導(dǎo)手冊(cè)里推薦的最小可點(diǎn)擊元素的尺寸是44*44 point(點(diǎn)),在設(shè)備上1 point等于1像素,所以轉(zhuǎn)換成像素就是44*44像素,換算成物理尺寸大概是7mm左右吧(人機(jī)工效學(xué)研究中得出的結(jié)論:用食指操作,觸擊范圍在7mm左右合適;用拇指操作,范圍在9mm左右合適)。據(jù)說(shuō)這個(gè)尺寸下,不容易出現(xiàn)誤操作,誤點(diǎn)擊;小于這個(gè)尺寸,點(diǎn)擊就會(huì)變的有些不太準(zhǔn)確,一向注重用戶(hù)體驗(yàn)的蘋(píng)果公司定義這個(gè)最小點(diǎn)擊尺寸也不是沒(méi)根據(jù)的……所以現(xiàn)在做設(shè)計(jì),為了圖標(biāo)精致,你可以把圖標(biāo)做的小一些,但是切圖輸出的時(shí)候,要考慮用戶(hù)點(diǎn)擊難易度的問(wèn)題,所以,切圖的時(shí)候,涉及到需要點(diǎn)擊的小圖標(biāo)的時(shí)候,普通屏幕還是切44px大小,高清屏就需要切88px,不夠的地方用透明區(qū)域補(bǔ)全,否則用戶(hù)點(diǎn)擊的時(shí)候會(huì)比較困難,會(huì)很不靈敏。⑥圖片圖標(biāo)的不同狀態(tài)每種圖標(biāo)或者圖片如果有不同狀態(tài),每一種不同的狀態(tài)都需要進(jìn)行切片輸出。比如按鈕有正常(normal),按下(pressed),選中(selected),禁用(disabled)等多種狀態(tài),最常出現(xiàn)的就是normal→pressed→normal;某些特定按鈕控件會(huì)出現(xiàn)選中狀態(tài),具體情況具體分析吧。這里顯示的是你要知道按鈕可能有幾種狀態(tài)……切片的命名規(guī)則命名并不是統(tǒng)一的規(guī)范,不同的公司不同的工程師有著自己不同的命名規(guī)范和命名習(xí)慣,但是大致還是有跡可循的,一般是:切片種類(lèi)+功能+圖片描述(可有可無(wú))+狀態(tài).png名稱(chēng)應(yīng)使用英文命名(中文不識(shí)別,推薦小寫(xiě)字母),不要以數(shù)字或者符號(hào)當(dāng)作開(kāi)頭,使用下劃線(xiàn)進(jìn)行連接。舉個(gè)例子:一個(gè)首頁(yè)的處于正常狀態(tài)的確定按鈕btn_sure_nor.pngbtn_sure_nor@2x.png切片種類(lèi)是按鈕(btn);功能是確定(sure);狀態(tài)是normal(正常)我通常是以這種命名方式進(jìn)行命名,如果你的公司有設(shè)計(jì)文檔,去看看之前留下的命名規(guī)范,如果沒(méi)有,那就去問(wèn)工程師吧。Tab bar(底部欄)說(shuō)說(shuō)Tab bar這里,因?yàn)楸容^特殊。如果單純的只有圖標(biāo),自然是只切圖標(biāo)就好了;早上和工程師溝通,這里該怎么切,工程師給的建議是圖標(biāo)+文字的模式,圖標(biāo)最好單獨(dú)切,文字后面程序加上去。另外記住,同一模塊的圖標(biāo)切片大小保持一致,上圖的四個(gè)圖標(biāo)本身尺寸并不相同,但是切圖的時(shí)候你需要切出相同尺寸的陰影大小,便于工程師開(kāi)發(fā)使用。該怎么切圖,還是要和你的工程師搭檔去溝通一下;以下是常用命名,這是我的命名習(xí)慣,并不是規(guī)范,所以要靈活,如果實(shí)在不知道英文,就用拼音代替也行。Part 5 工作常用數(shù)據(jù)你需要使用的字體:如果是用Mac設(shè)計(jì)的小伙伴,直接就用蘋(píng)果黑體字就好了;不過(guò)用Windows的就沒(méi)那么幸運(yùn)了,PC上還沒(méi)和IPhone默認(rèn)字體效果完全一樣的字體,通常都是拿其他字體代替。蘋(píng)果麗黑 Hiragino Sans GB W3(普通)/W6(粗體) 比較接近IPhone字體的一款字體,這是我之前一直使用的設(shè)計(jì)字體。黑體-簡(jiǎn) STHeitiSC-Light Mac里面拷出來(lái)的蘋(píng)果黑體,比較貼近IPhone手機(jī)字體,目前在用。我會(huì)把這兩款字體上傳,有需要可以下載。關(guān)于字體大小的問(wèn)題:頂部操作欄文字大小 34-38px標(biāo)題文字大小 28-34px正文文字大小 26-30px輔助性文字大小 20-24pxTab bar文字大小 20px文字大小只是一個(gè)范圍,這要根據(jù)設(shè)計(jì)的視覺(jué)效果來(lái)決定,不要死記硬背,但是切記,字體大小要用偶數(shù)。你需要知道的IPhone設(shè)計(jì)尺寸(這里是一個(gè)整屏的尺寸包括了狀態(tài)欄)320*480 IPhone3GS (我沒(méi)見(jiàn)過(guò)3GS實(shí)體機(jī),只在網(wǎng)上見(jiàn)過(guò)圖片,但你需要知道這個(gè)尺寸)640*960 IPhone 4/4s (4時(shí)代的設(shè)計(jì)尺寸)640*1136 IPhone 5/5s/5c (5時(shí)代的設(shè)計(jì)尺寸,雖然現(xiàn)在出來(lái)6/6 plus,但還有人再用這個(gè)尺寸設(shè)計(jì))750*1334 IPhone 6 (目前最新的設(shè)計(jì)尺寸,基本上現(xiàn)在做IOS的APP設(shè)計(jì),用這個(gè)的應(yīng)該最多)1242*2208 IPhone6 plus (這是標(biāo)準(zhǔn)分辨率,也就是設(shè)計(jì)需要的尺寸;另外還存在物理分辨率是1080*1920,這并不需要深入理解。plus還涉及到橫屏,橫屏是是沒(méi)有狀態(tài)欄的,設(shè)計(jì)橫屏?xí)r可以參考IPad的設(shè)計(jì)模式)你需要提交的啟動(dòng)頁(yè)面這是開(kāi)發(fā)工具Xcode提供的LaunchImage(啟動(dòng)頁(yè)面)的各項(xiàng)尺寸,不過(guò)好像現(xiàn)在已經(jīng)改了,這還是工程師很久之前給我的,咋一看是不是嚇一跳?工程師是按照IOS的系統(tǒng)版本來(lái)設(shè)置的,但你是設(shè)計(jì)師,你是按照IPhone的版本來(lái)作圖的,所以其實(shí)沒(méi)有那么多,真實(shí)情況下,我們的工程師要求提供以下幾個(gè)尺寸:640*960 (4/4s)640*1136 (5/5s/5c)750*1334 (6)1242*2208 (6 plus)2208*1242 (6 plus的橫屏尺寸,如果你們的軟件支持橫屏模式,你就需要做一張橫屏的啟動(dòng)頁(yè)面)注意,啟動(dòng)頁(yè)面一定要是PNG格式的圖標(biāo)的提交尺寸IOS系統(tǒng)可以自動(dòng)把圖片裁剪為圓角,所以提交圖標(biāo)的時(shí)候,你只需要提交正方形的PNG圖片即可。因?yàn)樾枰膱D標(biāo)非常多,不可能全部加進(jìn)去,只能選擇最好的尺寸,我們的工程師要求我提供以下圖標(biāo)尺寸:1024*1024 Retina APP Icon for APP Store(高清屏的APP Store)512*512 APP Icon for APP Store(普通屏幕的APP Store)120*120 6的主屏幕尺寸114*114 5/4s/4的主屏幕圖標(biāo)尺寸57*57 3GS的主屏幕圖標(biāo)尺寸58*58 Retina Settings圖標(biāo)尺寸29*29 Settings圖標(biāo)尺寸提交的圖標(biāo)尺寸不是固定的,所以,去找和你搭檔的工程師,讓他給你出一份需要提交的圖標(biāo)尺寸文檔。差不多用的到的就這些,有時(shí)間可以去查看一下蘋(píng)果的IOS人機(jī)指導(dǎo)手冊(cè)或者開(kāi)發(fā)文檔,上面有更加詳細(xì)的數(shù)據(jù)說(shuō)明。但實(shí)際工作中需要的并不像手冊(cè)上提供的尺寸那么多,所以工作之中,和你的工程師搭檔去溝通,你要知道的是你們公司開(kāi)發(fā)所用的數(shù)據(jù),而不是蘋(píng)果提供給你的數(shù)據(jù)。

想自學(xué)iOS開(kāi)發(fā),因該怎么開(kāi)始

參考一下學(xué)習(xí)的內(nèi)容:

第一階段:Objective-C語(yǔ)言基礎(chǔ)

OC開(kāi)發(fā)介紹,熟悉Xcode開(kāi)發(fā)工具,OC語(yǔ)言基礎(chǔ),OC流程控制,類(lèi)的基本概念,面向?qū)ο筇匦?,F(xiàn)oundation類(lèi)庫(kù),OC高級(jí)用法,協(xié)議和解析。

第二階段:iOS交互開(kāi)發(fā)

基礎(chǔ)UI控件,高級(jí)UI控件,視圖控制器,可視化開(kāi)發(fā)與適配,事件處理與手勢(shì),網(wǎng)絡(luò)與數(shù)據(jù)處理。

第三階段:iOS高級(jí)進(jìn)階、

流行技術(shù)與特效,系統(tǒng)框架選擇。

第四階段:HTML,CSS與javascript

PC端網(wǎng)站布局,HTML5+CSS3基礎(chǔ),WebAPP頁(yè)面布局,原生javascript交互功能開(kāi)發(fā),Ajax異步交互,JQuery應(yīng)用。

第五階段:PHP與MySQL

PHP基本語(yǔ)法。

第六階段:項(xiàng)目開(kāi)發(fā)

自由鋒享項(xiàng)目需求

投入時(shí)間和精力,以興趣來(lái)驅(qū)動(dòng)學(xué)習(xí)。不管是視頻學(xué)習(xí)還是看書(shū)學(xué)習(xí),在整個(gè)的學(xué)習(xí)過(guò)程中貫穿著代碼實(shí)戰(zhàn)??吹拇a是別人的,動(dòng)手寫(xiě)出來(lái)的是自己的。自己動(dòng)手寫(xiě)代碼,記憶更加深刻,效率更高。分階段的進(jìn)行學(xué)習(xí):1、看視頻(零掌握,系統(tǒng)的學(xué)習(xí)和了解),2、看書(shū)(對(duì)編程有了一定的掌握,作為補(bǔ)充和提高),3、看博客帖子(取長(zhǎng)補(bǔ)短)。

在學(xué)習(xí)過(guò)程中書(shū)籍資料的話(huà)看蘋(píng)果的官方文檔,開(kāi)發(fā)手冊(cè),其他的書(shū)籍在有了一定的掌握之后,作為補(bǔ)充和太高來(lái)學(xué)習(xí)。

為什么蘋(píng)果ios開(kāi)發(fā)的視頻那么少? 不像安卓 JAVA什么的 網(wǎng)上教程一大堆 我看了蘋(píng)果的軟件開(kāi)發(fā)

您好,當(dāng)然蘋(píng)果官方有提供使用方法及代碼庫(kù)供您閱讀

CGAffineTransformTranslate來(lái)自蘋(píng)果官方

這些方法如果您需要的話(huà),可以背下來(lái)

如果新方法出現(xiàn)了,那么會(huì)提供在蘋(píng)果額官方文檔中供您閱讀,對(duì)于新方法來(lái)說(shuō),蘋(píng)果會(huì)提供使用指南和方法介紹供您閱讀的

是的,如您所想,這些方法的發(fā)展一定是遵循某種規(guī)律的,但是很不幸,這些規(guī)律沒(méi)人能掌握,這是因?yàn)樘O(píng)果官方并非一人編寫(xiě)新方法,而也許是數(shù)十人上百人在共同編寫(xiě),大家只能遵照一種標(biāo)準(zhǔn)去編寫(xiě),而對(duì)于我們開(kāi)發(fā)者來(lái)說(shuō),閱讀最新的官方文檔或者用科學(xué)上網(wǎng)搜索一些外網(wǎng)論壇才能獲得最新的東西,而中文的用法則是一些先鋒者理解后翻譯出來(lái)造福給他人的

請(qǐng)您不要沮喪,這并非是您某些環(huán)節(jié)的知識(shí)缺失了,方法是固定的,您只需要了解并掌握,能夠在自己編寫(xiě)時(shí)知道并使用即可,您不必知道它是從哪里來(lái)的,您只需要知道這個(gè)方法能用來(lái)做什么就可以了

最簡(jiǎn)單的查找代碼的方式就是您按住command鍵,再用鼠標(biāo)點(diǎn)擊您要了解的方法,就會(huì)進(jìn)入該方法聲明的界面,這個(gè)界面中提供了一個(gè)簡(jiǎn)單的注釋告訴您是如何使用

如您需要查找的CGAffineTransformTranslate方法

Translate在英文中是轉(zhuǎn)化、翻譯的意思,在這里做轉(zhuǎn)化之意,注釋的意思是以參數(shù)t(一個(gè)CGAffineTransform類(lèi)型的變量)做參照通過(guò)tx和ty來(lái)進(jìn)行控件的偏移,當(dāng)然這段注釋晦澀難懂,因此如果您想要查看詳細(xì)的解釋?zhuān)梢赃x中這一行,點(diǎn)擊上方菜單欄的help,選擇Search Documentation for Selected Text選項(xiàng),那么您就會(huì)進(jìn)入APPLE的開(kāi)發(fā)者手冊(cè)和方法介紹了


網(wǎng)站名稱(chēng):ios核心開(kāi)發(fā)手冊(cè),ios核心開(kāi)發(fā)手冊(cè)是什么
文章出自:http://weahome.cn/article/dsddggs.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部