视频流媒体直播录播服务器(求高人解答)

视频流媒体直播录播服务器(求高人解答),第1张

您需要安装Flash播放器流媒体服务器软件

基于流协议(RTP / RTSP,MMS,RTMP,等)的流媒体服务器软件的主要功能的视频文件传输到客户端的在线观看,视频采集,压缩,软件接收实时视频流,实时流媒体协议的客户端。
典型的流媒体服务器的Microsoft Windows媒体服务(WMS),它使用MMS协议接收和发送视频使用Windows Media Player(WMP)的前端播放器,RealNetworks公司的Helix服务器,RTP / RTSP协议,接收和发送视频播放器的前端,Adobe公司的Flash媒体服务器使用RTMP(RTMPT / RTMPE / RTMPS)协议接收和发送视频,Real播放器,Flash播放器,播放器的前端。这是值得注意的,Adobe公司的Flash播放器(点击官方数据的普及的闪存播放器安装容量已达到99%以上),越来越多的网络视频开始到使用Flash播放器的播放器前端,所以越来越多的企业开始采用Flash播放器兼容的流媒体服务器,并开始消除其他类型的流媒体服务器。 Flash播放器,除了Adobe Flash媒体服务器,流媒体服务器有一个用Java编写的名为Red5的开源软件,在中国制造的有一个叫Ultrant的Flash Media Server的软件,说是很不错的,最新版本的到版本187,可以下载一个免费的社区版。

使用平滑流式处理技术实施直播并不是一个完全免费的方案。
流媒体服务器介绍 流媒体服务器的主要功能是以流式协议(RTP/RTSP、MMS、RTMP等)将视频文件传输到客户端,供用户在线观看;也可从视频采集。

入行这么多年,深深觉得流媒体服务器的未来也将伴随着宽带应用和网络发展的总趋势,毕竟科技改变生活,未来流媒体也将占据网络的主流,视频流媒体服务器的功能和作用也将越来越丰富。
在未来,流媒体服务器将转向高度分布式的系统结构,这种体系结构在地理上是分布的,但逻辑上是单一的系统映像。在未来,一方面会有高性能的网络存储设备,另一方面会有高度智能化的协议控制和处理设备。这将是未来流媒体服务器扩展的极好方向。那么现阶段,流媒体服务器的作用和功能都有什么?

说白了,流媒体服务器是运营商向用户提供视频服务的关键渠道,它可以收集、缓存、调度和广播媒体内容,它是流媒体使用系统的基础,也是流媒体使用系统的重要组成部分。
流媒体服务器的主要功能是通过流媒体协议(RTP/RTSP、MMS、RTMP等)向客户端传输视频文件,供用户在线观看。还可以从视频采集和压缩软件接收实时视频流,然后将流媒体协议直播给客户端。该技术广泛应用于视频点播、视频会议、远程教学、远程医疗和在线直播系统中。

而现在,我们的视频流媒体服务器已经兼具视频点播、监控视频流实时传输、视频录像回看等功能,我们的流媒体解决方案能够高效进行视频管理,提供编程语言无关化的RESTfulAPI接口,可以很简单的进行二次开发,并且各模块间无缝对接,亦可将流媒体服务器与其他第三方平台对接,组合灵活自由。

live555库本身实现了做rtsp服务器,客户端可以通过rtsp客户端访问服务器上的文件并播放,支持的文件格式如下:

本次任务实现了把live555移植到嵌入式海思芯片hi3516上做rtsp服务器,除了支持客户端播放服务器上上面格式文件外,另添加了实时播放hi3516摄像头图像与音频的功能。

live555源码目录如下:

四个基本的库分别是:BasicUsageEnvironment, groupsock, liveMedia和UsageEnvironment。
编译后即生成这4个库文件:

这里我只简单说下liveMedia库的功能,其他三个库是live555运行的基础库,太(mei)简(yan)单(jiu),就不说了。

liveMedia库包含了音视频相关的所有功能,包含音视频文件的解析,RTP传输封装等,我们可以看到这个目录下有对h264、AAC等文件解析的支持:

交叉编译过程:略
这里我主要是修改mediaServer文件夹下的示例程序,添加实时预览摄像头图像与mic声音功能。
hi3516芯片,视频编码格式为h264,音频编码格式为AAC。

1添加音频AAC支持
添加类 ADTSAudioLiveSource ,继承自FramedSource

在该类的doGetNextFrame函数里实现获取hi3516音频数据做为rtsp服务器音频源。
注意点:

11 adts默认是带7字节或者9字节的头,传给rtsp的时候是要去掉头的,实际上RTSP通过rtp传输AAC帧的时候是不带adts头的,而是带4个字节的mpeg4-generic头。

12 从FramedSource继承而来的变量

每次doGetNextFrame帧时,从FIFO里取一个完整的AAC帧,把帧拷贝到fTo buf里面,然后比较帧大小与fMaxSize来赋值几个关键的变量:

注意,不管帧长是否大于fMaxSize,每次都需要把完整的帧拷贝到fTo指针,live555内部会根据fNumTruncatedBytes等变量自行处理分包。

13 doGetNextFrame函数最后不管有没有取到帧,都需要执行FramedSource::afterGetting

14 采样率,通道数,configstr等的计算

这几个变量在mediaSubbsession建立RTPsink时要用到,它直接影响了SDP里对于AAC音频描述字段的产生

添加类 AACAudioLiveServerMediaSubsession ,继承自ADTSAudioFileServerMediaSubsession

createNewStreamSource函数创建上面的ADTSAudioLiveSource做为音频输入源,参数estBitrate为预估的码率,海思AAC编码码率设置为24kbps,所以estBitrate设置为24
createNewRTPSink有必要继承,因为需要根据音频源的采样率、通道数等创建RTPSink

2添加h264支持
添加 H264FramedLiveSource ,继承自FramedSource

unsigned maxFrameSize()函数必须继承,里面设置帧最大可能的大小,我设置为100000,如果不继承就是默认的,会出现画面马赛克
doGetNextFrame函数里面和AAC取帧的处理差不多,我加多了一个步骤,就是第一次取帧的时候会调用接口去产生一个关键帧,并且等待这个关键帧到来才处理,这样连接后出图会比较快。

添加类 H264VideoLiveServerMediaSubsession ,继承自H264VideoFileServerMediaSubsession

这个类就是实现createNewStreamSource时创建H264FramedLiveSource

3修改DynamicRTSPServer
修改类DynamicRTSPServer,在lookupServerMediaSession函数里动点手脚,默认在这个函数里面会根据文件名去寻找服务器下相应的文件做为直播源,我这里比较如果是我特定的live源名字则直接返回,相应的live源创建rtsp服务器的时候就添加好

4初始化rtsp server
初始化rtsp服务器,添加一个ServerMediaSession,该mediaSession添加一个AACAudioLiveServerMediaSubsession和一个H264VideoLiveServerMediaSubsession,然后把该mediaSession添加给rtsp服务器。

客户端访问 rtsp://xxxx/ch0live 时就可以看到实时的摄像头图像与声音啦!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13488663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存