经历10天 研究手机直播流媒体框架,首先是找android端的采集,推流的解决方案,得到的是2种,1.利用开源项目soydroid 现成的音视频编码,传输,推流功能。 2采用ffmpeg 对手机音视频编码,传输(目前未做研究)。虽然后面根据github 作者的步骤连接通了自己的wowza流媒体服务器推流。能用计算机,手机的VLC 播放直播,但是不是一般的卡,画面也很粗糙,流不稳定。又卡又延迟,也没有解决方案,导致该功能被搁置了。(问过一个开发者,他们的商业软件是采用的rtmp流协议传输。)
现在把自己查到的资料进行整理:
1. 视频直播解决方案:
2. 找到libstreaming 开源项目- 配置wowza服务器
3. Rtsp 丢包? 解码 解不出来 花屏, 马赛克 UDP -> 转 TCP
4. 画面卡顿,延迟 。
1.
实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC1889中公布的,后在RFC3550中进行更新。
RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在用户数据报协议上的。RTP广泛应用于流媒体相关的通讯和娱乐,包括电话、视频会议、电视和基于网络的一键通业务(类似对讲机的通话)。
2. rtmp
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。
协议是一套编码和解码的机制
是一套约定俗成的规范
一个很简单的比方
我有一只狗
我叫它“石头”
那我告诉所有的人
以后叫“石头”这只狗就会跑到你身边去
那么大家就都知道:想要这只狗过去,就叫“石头”就行了
这就是一个协议
计算机中的协议也是一样
传输文件的时候
我传输的内容是什么
我如何传输的
都需要让对方清楚
那怎么才能让对方清楚呢
就是按照一定的协议方式传输即可
顺便给你列举一下常见的网络协议:
网际层协议:
IP:Internet Protocol互联网协议
ICMP:Internet Control Message Protoco互联网控制报文协议
ARP:Address Resolution Protocol地址解析协议
RARP:Reverse Address Resolution Protocol反向地址转换协议
传输层协议:
TCP:Transmission Control Protocol传输控制协议
UDP:User Datagram Protocol用户数据报协议
应用层协议:
FTP:File Transfer Protocol文件传输协议
Telnet:Internet远程登陆服务的标准协议
SMTP:Simple Mail Transfer Protocol简单邮件传输协议
HTTP:Hypertext Transfer Protocol超文本传输协议
RIP:Routing Information Protocol路由信息协议
NFS:Net File System网络文件系统
DNS:Domain Name System域名系统
4. Internet? Intranet? Extranet?
接触过网络的朋友,或多或少都应该听过上面几个名词吧?不过,大家可知道它们之间的分别和如何定义吗?
其实,最早出现的名词应该是Internet,然后人民将 Internet 的概念和技巧引入到内部的私人网络,可以是独立的一个 LAN 也可以是专属的 WAN ,于是就称为 Intranet 了。它们之间的最大分别是:开放性。Internet 是开放的,不属于任何人,只要能连接得到您就属于其中一员,也就能获得上面开放的资源;相对而言,Intranet 则是专属的、非开放的,它往往存在于于私有网络之上,只是其结构和服务方式和设计,都参考 Internet 的模式而已。
Internet
Internet是一个以TCP/IP网络协议连接各个国家、地区、机构的计算机网络的数据通信网,它将数万个计算机网络、数千万台主机互连在一起,覆盖全球;从信息资源的角度看,Internet是一个集各个部门、各个领域的信息资源为一体的,供网络用户共享的信息资源网。
Intranet
Intranet网络是在一个组织机构中使信息和数据得以交换的一个系统。它包含了在一个公司内部交换信息所涉及的方方面面,如工具、程序和协议。Intranet的基本思想是在企业内部网络上采用TCP/IP协议,利用Internet的Web概念与技术为标准平台,通过防火墙把内部网络和Internet隔开。
Extranet
一般地,Extranet是一种将企业Intranet网络扩展到合作伙伴,以实现企业相关信息共享、信息交流和相互沟通的综合网络信息系统。可以说,Extranet是一种介于Intranet和Internet之间的网络,它可看成是由若干个相关单位的Intranet通过Internet实现互联而成。
5.
网络中的协议
协议,就是网络中计算机和计算机(如客户端和服务器端)之间沟通的约定,计算机之间数据传输,通信的规则。如同,我们人与人之间沟通,需要语言,而需要都能理解的语言,如普通话。
协议,一般规定,通信开始的标志,结束的标志,双方计算机如何开始通信等等。
计算机中,对协议的操作和实现,一般有软件来实现。在我们用的Windwos系统中,有专门的软件来操作执行相关的协议。如我们用到的浏览器,他就要调用相关的专门协议,如tcp/ip ,http等来达到目的。
比如我在
计算机
中安装了tcp/ip协议,那我的计算机中会多出相应的文件吗?如果是,请问tcp/ip协议的文件是什么格式的或者是什么文件?
答:电脑中的协议和我们平时所说的协议是不一样的,我们平时的协议是那种纸面上的东西,电脑上的协议仅仅是传输时对信息编码和解码的规则而已,并不是什么纸面或者文档形式的文本。
另外tcp/it并不是一个协议,而是一个协议组,其中包括一组协议。
7.
网络协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。当然,对于不相容终端,除了需变换字符集字符外还需转换其他特性,如显示格式、行长、行数、屏幕滚动方式等也需作相应的变换。
8.流媒体服务器
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。
相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。
作为新一代互联网应用的标志,流媒体技术在近几年得到了飞速的发展。而流媒体服务器又是流媒体应用的核心系统,是运营商向用户提供视频服务的关键平台。其主要功能是对媒体内容进行采集、缓存、调度和传输播放,流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量。因此,流媒体服务器是流媒体应用系统的基础,也是最主要的组成部分。
9. DarwinStreaming Server
DarwinStreaming Server简称DSS。DSS是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开放源代码的,基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OSX,Linux,FreeBSD,和Solaris操作系统上的。
10. live555
是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。
实际上,live555的工作相当于一个客户端采集音视频流,进行编码,压缩,推送的过程。
11. FEC:Forward Error Correction前向纠错
是一种数据编码技术,传输中检错由接收方进行验证,在FEC方式中,接收端不但能发现差错,而且能确定二进制码元发生错误的位置,从而加以纠正。FEC方式必须使用纠错码。发现错误无须通知发送方重发。区别于ARQ方式。
在目前的数字通信系统中,前向纠错技术FEC(Forward Error Correction)得到了广泛的应用。这一技术的产生和发展源于通信系统本身的需求,在工程实践中并不存在理想的数字信道,信号在各种媒体的传输过程中总会产生畸变和非等时时延,对数字信号来说就意味着产生误码和抖动,而抖动的最终效果也反映在系统的误码上。 FEC编解码可以用硬件实现也可用软件实现,采用FEC技术可较好地改善误码性能。
12. NALU(NetworkAbstract Layer Unit)
两标准中的比特流都是以NAL为单位,每个NAL单元包含一个RBSP,NALU的头信息定义了RBSP所属类型。类型一般包括序列参数集(SPS)、图像参数集(PPS)、增强信息(SEI)、条带(Slice)等,其中,SPS和PPS属于参数集,两标准采用参数集机制是为了将一些主要的序列、图像参数(解码图像尺寸、片组数、参考帧数、量化和滤波参数标记等)与其他参数分离,通过解码器先解码出来。此外,为了增强图像的清晰度,AVS-M添加了图像头(Picture head)信息。读取NALU流程中,每个NALU前有一个起始码0x000001,为防止内部0x000001序列竞争,H.264编码器在最后一字节前插入一个新的字节——0x03,所以解码器检测到该序列时,需将0x03删掉,而AVS-M只需识别出起始码0x000001。
(比特流中的数据包,头信息!)
13. HTTP Live Streaming(HLS)
HTTP LiveStreaming(HLS)是苹果公司(AppleInc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用,这里我就不再讨论,只谈HLS直播技术。
相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
根据以上的了解要实现HTTP LiveStreaming直播,需要研究并实现以下技术关键点
1.采集视频源和音频源的数据
2.对原始数据进行H264编码和AAC编码
3.视频和音频数据封装为MPEG-TS包
4.HLS分段生成策略及m3u8索引文件
5.HTTP传输协议