1.RTP,RTCP,RTSP等網絡協議有何用途和區別
RTP: Real-time Transport Protocol,實時傳輸協議,一般用於多媒體數據的傳輸。
RTCP: RTP Control Protocol,實時傳輸控制協議,同RTP一起用於數據傳輸的監視,控制功能。
RTSP: Real Time Streaming Protocol,實時流協議,用於多媒體數據流的控制,如播放,暫停等。
RTP/RTCP相對於底層傳輸層,和RTSP,SIP等上層協議一起可以實現視頻會議,視頻直播等應用。
rtsp發起/終結流媒體(通過sdp)
rtp傳輸流媒體數據
rtcp對rtp進行控制,同步。
RTSP的請求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,顧名思義可以知道起對話和控制作用
RTP/RTCP是實際傳輸數據的協議
RTP傳輸音頻/視頻數據,如果是PLAY,Server發送到Client端,如果是RECORD,可以由Client發送到Server
RTCP包括Sender Report和Receiver Report,用來進行音頻/視頻的同步以及其他用途,是一種控制協議
RTSP的對話過程中SETUP可以確定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以開始或者停止RTP的發送,等等
2.Android 的GUI系統的C語言框架包括:
1)PixelFlinger (下層的工具庫) 該庫提供像素級別的基本處理,如像素格式定義、畫點、線、多邊形、紋理顏色填充以及多層處理等操作接口,PixelFlinger 的頭文件 和 源代碼分別在 system/core/include/pixelflinger/ 、 system/core/libpixelflinger/
2)libui (GUI的框架庫)它不僅是顯示中樞而且是Android GUI 系統的中樞。改庫提供了包括顏色格式,Egl窗口(用於顯示)、按鍵及事件處理、Surface(顯示界面)、Overlay(顯示疊加層接口)、Camera(照相機接口)等多方面的定義。libui的頭文件和源代碼分別在 frameworks/base/include/ui/ 、 frameworks/base/libs/ui/;
3)SurfaceFlinger (主要對Surface 建立、控制、管理等功能)源代碼目錄:frameworks/base/libs/surfaceflinger/;
4)Skia 圖形圖像引擎, 該庫是android 的2D系統的底層實現(圖形,圖像,動畫,svg,文本等多方面的圖形庫,相當於android中圖形系統的引擎),通過JNI 向java層提供圖形功能接口,並且結合Surface 實現各種UI元素的功能;
5)OpenGL 3D 引擎。android 系統使用OPenGL的標準接口來支持3D圖形功能,其主要內容在frameworks/base/opengl/ 中,其中本地代碼的頭文件路徑爲:frameworks/base/opengl/include/EGL/ 、 frameworks/base/opengl/include/GLES/ ,源代碼在:frameworks/base/opengl/libagl/ 、 frameworks/base/opengl/libs/ ;
6)各種JNI (向Java層次提供接口)。
2. Andorid 的GUI系統的JAVA框架層主要包括:
1)android.graphics 類 (對應Skia 底層庫,提供繪圖接口);
2)android.view.Surface (構建顯示界面);
3)android.view.View (各種UI元素的基類);
4)javax.microedition.khronos.opengles (標準的OpenGL接口);
5)android.opengl (Android 系統和OpenGL的聯繫層);
3.網絡編程之TCP協議與UDP對比
UDP協議:
1,面向無連接。
2,不可靠協議,容易丟包。
3,速度快。
4,包體積有限制,64k以內。
通常,聊天,在線視頻,凌波。
TCP協議:
1、面向連接。
2、通過三次握手完成連接。
3、是可靠的協議。
4、相對udp稍慢。
4.H263/H264/MPEG4及其差別
目前比較流行的幾種適合網絡傳輸的視頻編碼有:MPEG4、H263、H264。下面簡要介紹下這些編碼。
(1)MPEG4:MPEG-4標準主要應用於視像電話(Video Phone),視像電子郵件(Video Email)和電子新聞(Electronic News)等。MPEG-4利用很窄的帶寬,通過幀重建技術,壓縮和傳輸數據,以求以最少的數據獲得最佳的圖象質量。它採用面向對象的壓縮方式,根據圖像的內容,把其中的對象(物體、人物、背景)分離出來,分別進行幀內、幀間編碼,並允許在不同的對象之間靈活分配碼率(對重要的對象分配較多的字節,對次要的對象分配較少的字節,從而大大提高了壓縮比)。
(2)H263:263是國際電聯ITU-T的一個標準草案,是爲低碼流通信而設計的。但實際上這個標準可用在很寬的碼流範圍,而非只用於低碼流應用。H.263採用無限制的運動向量以及基於語法的算術編碼,採用事先預測和與MPEG中的P-B幀一樣的幀預測方法。H.263支持5種分辨率,即除了支持QCIF和CIF外,還支持SQCIF、4CIF和16CIF。
(3)H.264是ITU-T的VCEG (Video Coding Experts Group)和ISO/IEC的MPEG(Motion Picture Experts Group)聯合成立的“聯合視頻組”(JVT:Joint Video Team)共同制定的新建議,它等同於ISO的MPEG-4的Part10。可以說,264是263的發展和延續,同時吸收了MPEG的一些優點。它的碼流結構網絡適應性強,增加了差錯恢復能力,能夠很AAC:“Advanced Audio Coding”的縮寫,中文稱爲“高級音頻編碼”,被手機界稱爲“21世紀數據壓縮方式”,AAC所採用的運算方式是與MP3的運算有所不同,AAC同時可以支持多達48個音軌,15個低頻音軌,更多種取樣率和比特率與及有多種言語的兼容能力,更高的譯碼效率,總括來說,AAC可以在對比MP3文件縮小30%的前題下提供更好的音質。好地適應IP和無線網絡的應用,
基於Android移植ffmpeg的意義在於:
1.解決了Android媒體框架OpenCore的多媒體支持不足,雖然說Android平臺的軟解功耗大,但是從PC機的發展歷史看,Android的視頻處理以後也會走以硬解爲主,軟解爲輔的路線。
2. 解決Android平臺直播的問題,雖然Android支持RTSP/RTP的直播方案,但是這種方案主要是普遍用在電信設備上,基於互聯網的海量視頻服務提供者還是以http live streaming方案爲主,測試時可以用ffmpeg將直播流打包成分段的ts流(如10秒鐘),然後組織成m3u8文件實現完整的直播方案,而且互聯網的直播內容還有很多是基於mms協議的,視頻格式是wmv,要聚集這些內容都是離不開ffmpeg軟解的。
6.flv、mkv、mp4、ts、mxf、mov多種格式的文件容器