欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年2022年流媒体服务器设计文档 .pdf

    • 资源ID:33377856       资源大小:175.43KB        全文页数:8页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年2022年流媒体服务器设计文档 .pdf

    1 Live555 流媒体服务器 -设计文档1 设计目的以 Live555 为平台搭建流媒体服务器,支持H.264 视频流和G.729 音频流两种实时流的直播功能,支持VLC 、MPLAYER等标准流媒体客户端软件进行RTSP请求播放。2 系统框架Live555 流媒体服务器接收到来自网络的RTSP 请求后,遵循RSTP 协议的标准,处理建立 RTSP 会话的信令流程,并分配相应的资源,建立对应的媒体通道。开始播放后,从摄像头和麦克风采集的音视频数据,视频数据在BF561 子板上进行H.264 编码,并将编码后的视频流通过SPORT 口,交由 BF536 底板上的Live555 流媒体服务器处理;音频数据直接由Live555 流媒体服务器进行G.729 编码。Live555 流媒体服务器根据RTSP协商的结果, 将编码后的音视频数据封装为RTP 数据,发送到请求的客户端。系统的整体流程如下图1 所示:H264视频流G.729音频流视频采集与编码H.264算法视频采集与编码G.729算法Live555 流媒体服务器H.264视频模块G.729音频模块RTSP请求RTP 音视频流流媒体播放器VLC/MPLAYER图 1 系统流程说明3 系统设计在 live555 源码的基础上,进行二次开发。Live555 支持 H.264 源视频文件的流化,需添加对实时流直播的支持;已有优化的G.729 编码库,需要添加在live555 中添加对G.729音频编码格式的支持。3.1 RTSP 服务器参考 live555 源码 mediaserver/目录下的live555MediaServer.cpp , 实现媒体流请求的点播名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 2 功能。客户端(Client)与服务器(Server)之间的 RTSP信令交互过程如下图2 所示:OPTIONresponseDESCRIB requestDESCRIBresponseSETUP requestPLAY requestPLAYresponseClientServerMediaSETUPresponseSETUPresponseSETUP requestTEARDOWN requestTEARDOWN responseOPTION request图 2 RTSP 信令交互过程1RTSP连接的建立过程RTSPServer 类用于构建一个RTSP 服务器,该类内部定义了一个RTSPClientSession 类,用于处理单独的客户会话。首先创建 RTSP 服务器 (具体实现类是DynamicRTSPServer) ,在创建过程中,先建立setUpOurSocket(ourSocket) 在 TCP 的 554(或 8554)端口进行监听,然后把连接处理函数句柄(RTSPServer:incomingConnectionHandler) 和 socket 句柄传给任务调度器(taskScheduler)。任务调度器把socket 句柄放入后面select 调用中用到的socket 句柄集 (fReadSet)中,同时将 socket 句柄和 incomingConnectionHandler句柄关联起来。接着,主程序开始进入任务调度器的主循环(doEventLoop) ,在主循环中调用系统函数select 阻塞,等待网络连接。当 RTSP客户端输入 (rtsp:/192.168.0.1/test.264) 连接服务器时, select返回对应的scoket,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 3 进而根据前面保存的对应关系,可找到对应处理函数句柄,这里就是前面提到的incomingConnectionHandler 了。在 incomingConnectionHandler 中创建了RTSPClientSession,开始对这个客户端的会话进行处理。2DESCRIBE 请求消息处理过程RTSP 服务器收到客户端DESCRIBE 请求后, 根据请求 URL(rtsp:/192.168.0.1/test.264) ,找到对应的流媒体资源,返回响应消息。 live555 中的 ServerMediaSession 类用来处理会话中描述,它包含多个(音频或视频)的子会话描述(ServerMediaSubsession)。RTSP 服务器收到客户端的连接请求,建立了 RTSPClientSession 类,处理单独的客户会话。在建立RTSPClientSession 的过程中,将新建立的socket 句柄( clientSocket)和 RTSP请求处理函数句柄RTSPClientSession:incomingRequestHandler传给任务调度器,由任务调度器对两者进行一对一关联。当客户端发出RTSP请求后,服务器主循环中的select 调用返回,根据socket 句柄找到对应的 incomingRequestHandler ,开始消息处理。先进行消息的解析,如果发现请求是DESCRIBE 则进入 handleCmd_DESCRIBE 函数。 根据客户端请求URL 的后缀 (如 test.264) ,调用成员函数DynamicRTSPServer:lookupServerMediaSession 查找对应的流媒体信息ServerMediaSession。若 ServerMediaSession 不存在,但是本地存在test.264 文件,则创建一个新的ServerMediaSession。在创建 ServerMediaSession 过程中, 根据文件后缀 .264 创建一个子会话描述 H264VideoFileServerMediaSubsession 。最后由 ServerMediaSession 完成组装响应消息中的 SDP 信息(SDP 组装过程见下面的描述),然后将响应消息发给客户端,完成一次消息交互。SDP 消息组装过程:ServerMediaSession 负责产生会话公共描述信息,子会话描述由H264VideoFileServerMediaSubsession产生。 H264VideoFileServerMediaSubsession 在其父类成员函数OnDemandServerMediaSubsession:sdpLines() 中生成会话描述信息。在sdpLines()实现里面,创建一个虚构(dummy) 的 FramedSource(具体实现类为H264VideoStreamFramer) 和 RTPSink (具体实现类为 SimpleRTPSink 和 H264VideoRTPSink ) ,最后调用setSDPLinesFromRTPSink(.) 成员函数生成子会话描述。3SETUP 请求消息处理过程RTSPClientSession 类用于处理单独的客户会话。其类成员函数handleCmd_SETUP() 处理客户端的SETUP 请求。 调用 parseTransportHeader()对 SETUP 请求的传输头解析,调用子名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 4 会话 (这里具体实现类为OnDemandServerMediaSubsession)的 getStreamParameters() 函数获取流媒体发送传输参数。将这些参数组装成响应消息,返回给客户端。客户端发送两个SETUP 请求,分别用于建立音频和视频的RTP 接收。4PLAY 请求消息处理过程RTSPClientSession 类成员函数handleCmd_PLAY() 处理客户端的播放请求。首先调用子会话的 startStream(),内部调用 MediaSink:startPlaying() ,然后是MultiFramedRTPSink:continuePlaying() ,接着调用MultiFramedRTPSink:buildAndSendPacket()。buildAndSendPacke内部先设置RTP 包头,内部再调用MultiFramedRTPSink:packFrame() 填充编码帧数据。packFrame 内部通过FramedSource:getNextFrame(), 接着 MPEGVideoStreamFramer:doGetNextFrame(),再接着经过MPEGVideoStreamFramer:continueReadProcessing() , FramedSource:afterGetting(.), MultiFramedRTPSink:afterGettingFrame(.), MultiFramedRTPSink:afterGettingFrame1(.) 等一系列繁琐调用,最后到了MultiFramedRTPSink:sendPacketIfNecessary(), 这里才真正发送RTP 数据包。 然后是计算下一个数据包发送时间,把 MultiFramedRTPSink:sendNext(.) 函数句柄传给任务调度器,作为一个延时事件调度。在主循环中,当MultiFramedRTPSink:sendNext() 被调度时,又开始调用MultiFramedRTPSink:buildAndSendPacket(.)开始新的发送数据过程,这样客户端可以源源不断的收到服务器传来的 RTP 包了。5TEARDOWN删除会话过程代码实现如下所示:else if (strcmp(extension, .264) = 0) NEW_SMS(H.264 Video); OutPacketBuffer:maxSize = 100000; / allow for some possibly large H.264 frames sms-addSubsession(H264VideoFileServerMediaSubsession:createNew(env, reuseSource); sms-addSubsession(G729ServerMediaSubsession:createNew(env, reuseSource);/add by yezi 3.2 H.264 视频流化获取发送传输参数的过程:调用子会话 (具体实现类H264VideoServerMediaSubsession )的 createNewStreamSource()创建 H264liveSource 视频数据源, 选择发送传输参数,并调用子会话的 createNewRTPSink() 创建 H264VideoRTPSink 。同时将这些信息保存在StreamState类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 5 对象中,用于记录流的状态。H.264 视频实现相关类图如图3所示:MediumServerMediaSubsessionOnDemandServerMediaSubsession+createNewRTPSink()-createNewStreamSource()H264VideoServerMediaSubsessionH264liveSourceH264VideoRTPSink图 3 H.264 视频实现类图H.264 视频流解析过程如图4 所示:H264VideoRTPSinkH264FUAFragmenter-结束11-结束2*H264VdieoDeviceSourceH264VideoStreamFramerH264VideoStreamParser-结束 31-结束 4*MPEGVideoStreamFramerFramedFilterfSource-结束51-结束 6*fInputSourcefParserfInputSource-结束71-结束8*-结束91-结束 10*fInputSource图 4 H.264 视频流解析过程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 6 3.3 G.729 音频编码与流化获取发送传输参数的过程:调用子会话 (具体实现类G729AudioServerMediaSubsession )的 createNewStreamSource()创建 G729AudioSource 视频数据源, 选择发送传输参数,并调用子会话的createNewRTPSink() 创建 SimpleRTPSink。同时将这些信息保存在StreamState类对象中,用于记录流的状态。G.729 音频实现相关类图如图5 所示:MediumServerMediaSubsessionOnDemandServerMediaSubsession+createNewRTPSink()-createNewStreamSource()G729AudioServerMediaSubsessionG729AudioSourceSimpleRTPSink图 5 G.729 音频实现类图G.729 音频流解析过程如图6 所示:SimpleAudioRTPSink-结束11-结束 2*PCMAudioDeviceSourceG729FromPCMAudioSourceFramedFilterfSource-结束 91-结束 10*fInputSource图 6 G.729 音频流解析过程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 7 4 系统实现系统整体的类图结构如下所示: 1. Medium 2. RTSPServer 2. RTSPOverHTTPServer 2. MediaSession 2. ServerMediaSession 2. ServerMediaSubsession 3. OnDemandServerMediaSubsession 4. FileServerMediaSubsession 5. H264VideoFileServerMediaSubsession4. G711ServerMediaSubsession2. MediaSource 3. FramedSource 4. H264VideoSource4. G711AudioSource 2. MediaSink 3. RTPSink 4. MultiFramedRTPSink 5. MPEG4GenericRTPSink 5. VideoRTPSink 6. H264VideoRTPSink 5. SimpleRTPSink 2. RTCPInstance 2. RTSPClient 4.1 RTSP 会话管理参照live555MediaServer.cpp 和 DynamicRTSPServer.* 改写,实现媒体流的点播功能(简化即可)。在 DynamicRTSPServer 类中,调用creatNewSMS 时,同时添加如下两个subsession。sms-addSubsession(H264VideoFileServerMediaSubsession:createNew(env,reuseSource); sms-addSubsession(G729ServerMediaSubsession:createNew(env, reuseSource); 4.2 H.264 视频流化参照 H264VideoFileServerMediaSubsession.* 和 DeviceSource.* 改写 H264VideoServerMed名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 8 iaSubsession.*和 H264VideoSource.* 。创建 sink 直接调用H264VideoRTPSink.* 。DeviceSource.* 文件中,将读视频文件操作改为读内存操作。4.3 G.729 音频流化参照 AMRAudioFileServerMediaSubsession.*和 gDeviceSource.* 改写 G729ServerMediaSubsession.*和 G.729AudioSource.* 。创建 sink 直接调用SimpleRTPSink.* 。gDeviceSource.* 文件中,将读音频文件操作改为读内存操作,并调用 libg729ab.a 库文件,对内存中的音频流进行G.729 编码。5 存在的问题1音视频实时流采用读文件模拟音视频流时,可以正常运行;但真正读文件的时候,从SPORT 串口读取 H.264 视频流,采取的阻塞方式,实际运行效果有待验证。2系统稳定性长时间运行的稳定性?3图像和网络传输质量评价的标准和指标?4视频参数设置可考虑的一种方式,直接在BF561 板卡中运行的代码中修改,无需客户端发送任何参数设置命令。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -

    注意事项

    本文(2022年2022年流媒体服务器设计文档 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开