当前位置: 首页 > news >正文

移动网站开发与维护佛山网站制作维护

移动网站开发与维护,佛山网站制作维护,网站单页模板制作软件,电子商务网站策划书模板源代码已上传gitee 一、需求 live555源代码中的liveMediaServer是将本地文件作为源文件搭建rtsp服务器#xff0c;我想用live555封装一个第三方库#xff0c;接收流数据搭建Rtsp服务器#xff1b;预想接口如下#xff1a; class LiveRtspServer { public:/***brief构造一…源代码已上传gitee 一、需求 live555源代码中的liveMediaServer是将本地文件作为源文件搭建rtsp服务器我想用live555封装一个第三方库接收流数据搭建Rtsp服务器预想接口如下 class LiveRtspServer { public:/***brief构造一个新的Live Rtsp服务器对象**param videoCodec要用于流式传输的视频编解码器*param audioCodec要用于流式传输的音频编解码器*param fps流的帧速率*param port用于流传输的端口*param suffix要添加到流URL的后缀*param username身份验证的用户名*param password身份验证的密码*/LiveRtspServer(const std::string videoCodec h264,const std::string audioCodec none, unsigned fps 60,unsigned port 8554, const std::string suffix ,const std::string username ,const std::string password );/***brief设置客户端上状态已更改的回调**param callback客户端状态更改时要调用的回调*/void setOnClientStateChanged(clientConnectCallback callback){clientConnectCallback_ callback;}/***brief启动服务器*/void start();/***brief停止服务器*/void stop();/***brief向客户端发送视频数据**param buf包含视频数据的缓冲区*param len视频数据的长度*如果数据发送成功return true否则为false*/bool sendVideoData(const unsigned char *buf, int len);/***brief向客户端发送音频数据**param buf包含视频数据的缓冲区*param len视频数据的长度*如果数据发送成功return true否则为false*/bool sendAudioData(const unsigned char *buf, int len);/***brief获取服务器的RTSP URL**param ipv6是否使用ipv6*return const char*RTSP URL*/const char *RtspUrl(int ipv6 0); };二、实现 2.1 阅读代码 阅读LiveMediaServer源码可以发现建立Rtsp服务器的大致过程比较简单创建一个继承RTSPServer的类重写lookupServerMediaSession方法创建ServerMediaSession实例并调用addServerMediaSession将实例添加到RTSPServer中再通过创建对应不同数据格式的ServerMediaSubsession实例和ServerMediaSession的addSubsession方法将ServerMediaSubsession实例添加到ServerMediaSession中最终读取数据通过ServerMediaSubsession的createNewStreamSource创建的FramedSource实现写的有点乱回头做个流程图整体来说过程比较简单 详细的源码分析可以查看live555学习笔记【3】—RTSP服务器一;这里摘录其中RTSP链接建立过程 客户端发起RTSP OPTION请求目的是得到服务器提供什么方法。RTSP提供的方法一般包括OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、SCALE、GET_PARAMETER。服务器对RTSP OPTION回应服务器实现什么方法就回应哪些方法。在此系统中我们只对DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE方法做了实现。客户端发起RTSP DESCRIBE请求服务器收到的信息主要有媒体的名字解码类型视频分辨率等描述目的是为了从服务器那里得到会话描述信息SDP。服务器对RTSP DESCRIBE响应发送必要的媒体参数在传输H.264文件时主要包括SPS/PPS、媒体名、传输协议等信息。客户端发起RTSP SETUP请求目的是请求会话建立并准备传输。请求信息主要包括传输协议和客户端端口号。服务器对RTSP SETUP响应发出相应服务器端的端口号和会话标识符。客户端发出了RTSP PLAY的请求目的是请求播放视频流。服务器对RTSP PLAY响应响应的消息包括会话标识符RTP包的序列号时间戳。此时服务器对H264视频流封装打包进行传输。客户端发出RTSP TEARDOWN请求目的是关闭连接终止传输。服务器关闭连接停止传输。 2.2 搭建RTSP服务器 所以我们照着这个流程走一遍即可 仿照liveMedia/include/ByteStreamFileSource.hh创建自己的liveMedia/include/ByteStreamFrameSource.hh重写doGetNextFrame获取数据接口并添加一个doPutFrames(const uint8_t *buffer,unsigned bufferSize)传递视频数据接口将传递进的数据在doGetNextFrame中拷贝到fTo地址设置fFrameSize仿照liveMedia/include/FileServerMediaSubsession.hh创建自己的liveMedia/include/StreamServerMediaSubsession.hh以及对应的子类liveMedia/include/H265VideoStreamServerMediaSubsession.hh和liveMedia/include/H264VideoStreamServerMediaSubsession.hh这两个子类调用createNewStreamSource方法创建第一步的ByteStreamFrameSource实例仿照mediaServer/DynamicRTSPServer.hh创建自己的liveRtspServer/include/StreamRTSPServer.hh其中createNewSMS方法我们根据传入的视频编码格式创建我们自己的H264/H265VideoStreamServerMediaSubsession关键的一步如何把ByteStreamFileSource中数据传入接口doPutFrames导出到我们自己的StreamRTSPServer中在这里我通过1、2、3步创建自己的类中层层传递void onFrameSourceStateChanged(void* clientData, Boolean state)回调的方式将在第2步里创建或析构ByteStreamFrameSource的实例指针传到StreamRTSPServer的std::vectorByteStreamFrameSource* fFrameSources成员中这样就可以将数据传入了 2.3 问题 流程走通后遇到有时候rtsp客户端无法连接到客户端问题经层层跟踪发现rtsp链接建立时也就是服务器对RTSP DESCRIBE响应这一步服务器端要读取一帧IDR帧获取其中视频流信息的SPS/PPS/VPS信息发送必要的媒体参数给客户端LiveMediaServer中创建RTSP服务器时每次链接建立都是从开始读取文件必然能读取到IDR帧。而流式推送如果编码参数GOP过大长时间读取不到IDR帧链接就会超时退出因此需要将IDR帧保存链接建立中第一次读取数据时保证读取到的是IDR帧 三、遗留问题 目前虽然送进解析类的是一帧帧数据但是ByteStreamFrameSource仍然保留了文件读取的BANK_SIZE限制没有找到控制发送地方没有完全看懂这部分代码所以在获取数据是加了等待数据到达超时方式感觉不太友好对音频处理不熟音频功能没有添加live555源代码为单线程读取数据多客户端连接会有性能瓶颈如何修改多线程没有稳定性测试也没有用于项目中可能会有各种BUG还需继续优化 抛砖引玉希望路过大佬不吝指点一二。
http://www.hkea.cn/news/14471688/

相关文章:

  • 网站建设服务市场趋势商品促销活动策划方案
  • 公司建立网站的好处wordpress 建网站
  • 网站建设案例 央视网北京++网站建设咨询顾问公司
  • 兰州新站点seo代理设计网站大全有哪些
  • 做网站公司销售开场白做任务领佣金的网站
  • 2023适合小学生的新闻事件做网站建设优化的公司
  • 接做施工图的网站对网站开发语言的统计
  • 免费源码资源源码站企业网站建设优化
  • 网站内的链接怎么做的杭州软件开发公司
  • 县城做网站的多么优质网站策划
  • 常见的微网站平台有哪些四川煤矿标准化建设网站
  • wordpress淘宝客网站模板安卓aso关键词优化
  • 婚纱影楼网站4399网页版
  • 网站做5级分销合法吗南召seo快速排名价格
  • 6网站建设做网站wordpress短代码大全
  • 开发区网站建设在哪网站开发系统设计怎么写
  • 成都网站建设方案优化网站建设制作周期
  • 消费返利系统网站建设网站怎么添加js广告位
  • 域名备案好了后怎么做网站完整html网页代码案例
  • 危机公关处理方案网站的seo方案
  • 桂林公司做网站dede 网站地图怎么做
  • 网站建设步骤流程详细介绍中国建设银行网上银行网站
  • 个人网站设计构思成都网站建设桔子科技
  • 网站如何做内部链接网站搭建详细步骤
  • 做教学的视频网站有哪些问题网站项目流程表
  • 短视频网站开发手机wap网站模板
  • 蓝德网站建设三水做网站
  • 丹东建设银行网站天翼云免费服务器
  • 山东app网站制作想开一家相亲网站 怎么做
  • 长安网站建设免费咨询空间 网站