海康摄像头开发SRS+ffmpeg+http-flv+flv.js(二)

海康摄像头开发SRS+ffmpeg+http-flv+flv.js(二),第1张

接上篇文章。虽然部署好了网络,通过VLC能播放视屏,但是离简单好用的道路还很远,在这期间查了很多资料,对整个系统有了不扫了解。首先引用一下,关于实现web播放的几种方法和优缺点(以下来自网络):

开始的我也使用了网络的介绍,用ffmpeg转成rmtp流,但最后发现如果要播放rmtp流是需要flash支持的,现在的flash的支持度很差,显然不行,网上现在能找到的FFmpeg + nginx-rtmp-module方案并不是一个好方案。所以还是需要使用方案三。

以下的这个表写的比较清楚,能支持html5播放器的就httpflv和hls,二选一选择httpflv。

在本人实际操作中使用的流媒体服务器并不是nginx-http-flv-module ,而是用了SRS(simple rmtp server)+FFMPEG方案,感觉更简单。

搭建过程先省略。(详细搭建SRS+ffmpeg单独文档)

遇到的问题:

搭建完成,推流后VLC能播放,但是用flvjs的播放器

http://bilibiligithubio/flvjs/demo/

总是无法播放,后来发现下面还是有提示错误的。

这里主要是要注意转换语句:

原来是这样,参数-vcodec 和 -acodec 都用的copy,而实际摄像头处理的视频格式是h264+pcma_u

后来改成这样,将-acodec 改成aac

就能看到视频了

视频里是家中窗外风景。

实际使用中发现,如果视频部分h264不转码,用copy的模式的话cpu性能不高,可以支持很多路数。

视频和vlc播放的时候延时10s左右,感觉延时有点大。

接下来就是要把flvjs移植到工程中。然后现在的推流什么的都是命令行执行的,这些肯定不行

您应该是想要用FMS的RTMFP功能, 但是FMS的版本太旧了需要花钱升级

蘇州八百里科技的Server我有安装并测试过, 貌似基於FMS开发并加上客制的管理介面

我在公司内部进行测试时是无法分享的, 上传RTMP流的发布者回放则正常

服务器负载没做过大量测试是无法比较的, 但若底层一样都是FMS, 性能差不多

但是原装的FMS可以串接进行负载平衡, 万一一台撑不住还能保持服务

一、直播的技术架构:

直播视频采集SDK(PC/IOS/Anddroid)——直播CDN

(直播流分发加速)——直播视频播放器SDK(PC/IOS/Android)

二、音视频处理的一般流程:

数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示

1、数据采集:

摄像机及拾音器收集视频及音频数据,此时得到的为原始数据

涉及技术或协议

摄像机:CCD、CMOS

拾音器:声电转换装置(咪头)、音频放大电路

2、数据编码:

使用相关硬件或软件对音视频原始数据进行编码处理(数字化)及加工(如音视频混合、打包封装等),得到可用的音视频数据

涉及技术或协议:

编码方式:CBR、VBR

编码格式

视频:H265、H264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等

音频:G711μ、AAC、Opus等,封装有MP3、OGG、AAC等

3、数据传输:

将编码完成后的音视频数据进行传输,早期的音视频通过同轴电缆之类的线缆进行传输,IP网络发展后,使用IP网络优传输

涉及技术或协议:

传输协议:RTP与RTCP、RTSP、RTMP、HTTP、HLS(HTTP Live Streaming)等

控制信令:SIP和SDP、SNMP等

4、解码数据:

使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像/声音

涉及技术或协议:

一般对应的编码器都会带有相应的解码器,也有一些第三方解码插件等

5、播放显示:

在显示器(电视、监视屏等)或扬声器(耳机、喇叭等)里,显示相应的图像画面或声音

涉及技术或协议:

显示器、扬声器、3D眼镜等

三、常见的视频直播相关协议:

1、RTMP(Real Time Messaging Protocol,实时消息传送协议)

RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:

1)、工作在TCP之上的明文协议,使用端口1935;

2)、RTMPT封装在HTTP请求之中,可穿越防火墙;

3)、RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议是被Flash用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。

2、RTSP(Real Time Streaming Protocol,实时流传输协议)

RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。

RTSP语法和运作跟HTTP/11类似,但并不特别强调时间同步,所以比较能容忍网络延迟。代理服务器的缓存功能也同样适用于RTSP,并且因为RTSP具有重新导向功能,可根据实际负载情况来切换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

3、RTP(Real-time Transport Protocol,实时传输协议)

RTP是针对多媒体数据流的一种传输层协议,详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通系统(配合H323或SIP),使它成为IP电话产业的技术基础。

RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。

RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性,只管发送,不管传输是否丢包,也不管接收方是否有收到包。RTP 实行有序传送,RTP中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,如在视频解码中,就不需要顺序解码。

4、RTCP(Real-time Transport Control Protocol,实时传输控制协议)

RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。

RTCP的主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息来提高服务质量,比如限制流量或改用压缩比小的编解码器。

如果是单纯的帖FLASH 在上述网站的播放页面中已经提供了帖FLASH的代码 如果你是想用于你自己网站上链接播放的话 那你去下载几个FLASH网页播放器的源文件回来 自己修改 或者索性自己编写一个播放器出来 就是用到FLASH里面视频 及流等几个类罢了

然后用软件获取上述网站的视频 文件链接地址 在自己定的播放器中读取并播放 即可

上面说的就是直接引用和间接引用的方法

你直接在FMS启动页面点击交互(Interactive)页面,然后在右下角的窗口里输入(不懂楼主用的ftmp是什么协议,就拿我理解的rtmp协议来举例啦)“rtmp://localhost/live/livestream"看看还出不出这种现象。如果不出,那说明是代码问题;如果同样出现,那就是服务器安装/配置方面的问题了(可能系统性能不够强悍)。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 海康摄像头开发SRS+ffmpeg+http-flv+flv.js(二)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情