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多种格式的文件容器