首页 > 代码库 > 直播技术学习笔记(一)

直播技术学习笔记(一)

播放器相关技术:

1、开源项目jjdxm_ijkplayer是基于ijkplayer简单的UI界面;
ijkplayer是一个基于 FFmpeg n2.6 的开源 Android/iOS 视频播放器;
2、虚拟按键的隐藏方法:
rootView = getLayoutInflater().from(this).inflate(R.layout.activity_calrity,null);
setContentView(rootView);
/**虚拟按键的隐藏方法*/
rootView.getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener() {
	@Override
	publicvoid onGlobalLayout() {
	    //比较Activity根布局与当前布局的大小
		int heightDiff = rootView.getRootView().getHeight()- rootView.getHeight();
		if(heightDiff >100) {
	        //大小超过100时,一般为显示虚拟键盘事件
			rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
		} else {
	         //大小小于100时,为不显示虚拟键盘或虚拟键盘隐藏
			rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
		}
	}
});
3、设置屏幕常亮:
PowerManager pm =(PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLockakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"liveTAG");
wakeLock.acquire();//激活设备常亮状态
wakeLock.release();//恢复设备亮度状态

直播的相关技术

1、直播概念:
①由手机一端作为视频采集端,采集视频信息,通过网络实时传递到服务器,再由服务器推送到视频播放端的过程
流媒体:采用流式传输的方式在Internet播放的媒体格式;
这种播放形式不同于以往的播放形式,采集端以数据包的形式发送到服务器,服务器将数据包推送给播放端;
这样播放端不需要获取到完整的视频文件,就可以实现对采集端数据的播放任务。
③直播中采用的文件传输方式就是流媒体文件传输方式
2、视频编码的基本原理:
①视频图像数据有极强的相关性也就是说有大量的冗余信息,压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性)
②压缩技术包含帧内图像数据压缩技术帧间图像数据压缩技术熵编码压缩技术
③视频压缩中的每一帧画面都有相似的地方,在压缩时只保留与前一帧不同的地方即将信号中部分感觉不出的分量压缩掉或“掩蔽掉”即祛除冗余压缩.
3、硬编码和软编码
①硬编码:通过调用Android系统自带的Camera录制视频,实际上是调用了底层的高清编码硬件模块也即显卡不使用CPU;速度快
②软编码:使用CPU进行编码如常见C/C++代码,一般编译生成的都是二进制数据,速度相对较慢。例如使用Android NDK编译H264生成so库,编写jni接口,再使用java调用so库。
③视频文件一般涉及到三个参数:帧率分辨率码率
#帧率每秒显示的图片数。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。并且当帧速达到一定数值后,再增长的话,人眼也不容易察觉到有明显的流畅度提升了。
#分辨率(矩形)图片的长度和宽度,即图片的尺寸;
#码率把每秒显示的图片进行压缩后的数据量。影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。 
体积=码率×时间
帧率×分辨率=压缩前的每秒数据量(单位应该是若干个字节)
压缩比=压缩前的每秒数据量/码率(对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量越差。)
4、所谓“清晰”,是指画面十分细腻,没有马赛克。并不是分辨率越高图像就越清晰。
简单说:在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。
在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。

5、CDN内容分发网络

CDN的全称是Content Delivery Network,即内容分发网络:
①其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
②通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
③其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度

6、RTMP实时消息传输协议

RTMP是Real Time Messaging Protocol,即实时消息传输协议
①该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。
②RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支
③持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等
④在RTMP协议中信令媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head;所以RTMP协议也有一个Message head;
⑤还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节)而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk每一个Message + head都是由一个和多个chunk组成的

7、RTC实时通讯

RTC实时通讯 即 Real-time communications

直播技术学习笔记(一)