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

邢台市网站制作百度推广竞价排名技巧

邢台市网站制作,百度推广竞价排名技巧,杭州网站推广优化,网站建设思维源代码已上传gitee 一、需求 live555源代码中的liveMediaServer是将本地文件作为源文件搭建rtsp服务器,我想用live555封装一个第三方库,接收流数据搭建Rtsp服务器;预想接口如下: 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实例和ServerMediaSessionaddSubsession方法,将ServerMediaSubsession实例添加到ServerMediaSession中,最终读取数据通过ServerMediaSubsessioncreateNewStreamSource创建的FramedSource实现;写的有点乱,回头做个流程图,整体来说过程比较简单;
详细的源码分析可以查看live555学习笔记【3】—RTSP服务器(一);这里摘录其中RTSP链接建立过程:

  1. 客户端发起RTSP OPTION请求,目的是得到服务器提供什么方法。RTSP提供的方法一般包括OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、SCALE、GET_PARAMETER。
  2. 服务器对RTSP OPTION回应,服务器实现什么方法就回应哪些方法。在此系统中,我们只对DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE方法做了实现。
  3. 客户端发起RTSP DESCRIBE请求,服务器收到的信息主要有媒体的名字,解码类型,视频分辨率等描述,目的是为了从服务器那里得到会话描述信息(SDP)。
  4. 服务器对RTSP DESCRIBE响应,发送必要的媒体参数,在传输H.264文件时,主要包括SPS/PPS、媒体名、传输协议等信息。
  5. 客户端发起RTSP SETUP请求,目的是请求会话建立并准备传输。请求信息主要包括传输协议和客户端端口号。
  6. 服务器对RTSP SETUP响应,发出相应服务器端的端口号和会话标识符。
  7. 客户端发出了RTSP PLAY的请求,目的是请求播放视频流。
  8. 服务器对RTSP PLAY响应,响应的消息包括会话标识符,RTP包的序列号,时间戳。此时服务器对H264视频流封装打包进行传输。
  9. 客户端发出RTSP TEARDOWN请求,目的是关闭连接,终止传输。
  10. 服务器关闭连接,停止传输。

2.2 搭建RTSP服务器

所以我们照着这个流程走一遍即可;

  1. 仿照liveMedia/include/ByteStreamFileSource.hh创建自己的liveMedia/include/ByteStreamFrameSource.hh,重写doGetNextFrame获取数据接口,并添加一个doPutFrames(const uint8_t *buffer,unsigned bufferSize)传递视频数据接口;将传递进的数据在doGetNextFrame中拷贝到fTo地址,设置fFrameSize
  2. 仿照liveMedia/include/FileServerMediaSubsession.hh创建自己的liveMedia/include/StreamServerMediaSubsession.hh,以及对应的子类liveMedia/include/H265VideoStreamServerMediaSubsession.hhliveMedia/include/H264VideoStreamServerMediaSubsession.hh,这两个子类调用createNewStreamSource方法创建第一步的ByteStreamFrameSource实例;
  3. 仿照mediaServer/DynamicRTSPServer.hh创建自己的liveRtspServer/include/StreamRTSPServer.hh,其中createNewSMS方法我们根据传入的视频编码格式创建我们自己的H264/H265VideoStreamServerMediaSubsession
  4. 关键的一步如何把ByteStreamFileSource中数据传入接口doPutFrames导出到我们自己的StreamRTSPServer中,在这里我通过1、2、3步创建自己的类中层层传递void onFrameSourceStateChanged(void* clientData, Boolean state)回调的方式,将在第2步里创建或析构ByteStreamFrameSource的实例指针传到StreamRTSPServerstd::vector<ByteStreamFrameSource* > fFrameSources成员中,这样就可以将数据传入了;

2.3 问题

流程走通后,遇到有时候rtsp客户端无法连接到客户端问题,经层层跟踪发现,rtsp链接建立时也就是服务器对RTSP DESCRIBE响应,这一步服务器端要读取一帧IDR帧获取其中视频流信息的SPS/PPS/VPS信息,发送必要的媒体参数给客户端,LiveMediaServer中创建RTSP服务器时,每次链接建立都是从开始读取文件,必然能读取到IDR帧。而流式推送,如果编码参数GOP过大,长时间读取不到IDR帧,链接就会超时退出,因此需要将IDR帧保存,链接建立中第一次读取数据时保证读取到的是IDR帧;

三、遗留问题

  1. 目前虽然送进解析类的是一帧帧数据,但是ByteStreamFrameSource仍然保留了文件读取的BANK_SIZE限制,没有找到控制发送地方,没有完全看懂这部分代码,所以在获取数据是加了等待数据到达超时方式,感觉不太友好;
  2. 对音频处理不熟,音频功能没有添加;
  3. live555源代码为单线程读取数据,多客户端连接会有性能瓶颈,如何修改多线程;
  4. 没有稳定性测试,也没有用于项目中,可能会有各种BUG,还需继续优化

抛砖引玉,希望路过大佬不吝指点一二。


文章转载自:
http://wanjiainteresting.rsnd.cn
http://wanjiaunderbuy.rsnd.cn
http://wanjiaextinct.rsnd.cn
http://wanjiabustee.rsnd.cn
http://wanjiadolomitic.rsnd.cn
http://wanjiaplainclothes.rsnd.cn
http://wanjiabowsman.rsnd.cn
http://wanjiaantrustion.rsnd.cn
http://wanjiasyntactical.rsnd.cn
http://wanjialordosis.rsnd.cn
http://wanjiapotline.rsnd.cn
http://wanjiavermiculate.rsnd.cn
http://wanjiaapplecart.rsnd.cn
http://wanjiasupportable.rsnd.cn
http://wanjiapoetically.rsnd.cn
http://wanjiawire.rsnd.cn
http://wanjiaknp.rsnd.cn
http://wanjiaelytron.rsnd.cn
http://wanjialimulus.rsnd.cn
http://wanjiacorncob.rsnd.cn
http://wanjiajuice.rsnd.cn
http://wanjiastratagem.rsnd.cn
http://wanjiadrab.rsnd.cn
http://wanjiabromelin.rsnd.cn
http://wanjiaadvices.rsnd.cn
http://wanjiabeatrix.rsnd.cn
http://wanjiaseropositive.rsnd.cn
http://wanjiareconciliation.rsnd.cn
http://wanjiauralite.rsnd.cn
http://wanjiaunable.rsnd.cn
http://wanjiaaerolith.rsnd.cn
http://wanjiapash.rsnd.cn
http://wanjiagomeral.rsnd.cn
http://wanjiazag.rsnd.cn
http://wanjiaassociable.rsnd.cn
http://wanjiatunnel.rsnd.cn
http://wanjiapeipus.rsnd.cn
http://wanjiacellulosic.rsnd.cn
http://wanjiadisposed.rsnd.cn
http://wanjiadumpy.rsnd.cn
http://wanjiatidings.rsnd.cn
http://wanjiamisalliance.rsnd.cn
http://wanjiacarriable.rsnd.cn
http://wanjiaapproximative.rsnd.cn
http://wanjiaanimalist.rsnd.cn
http://wanjiavermicular.rsnd.cn
http://wanjiagee.rsnd.cn
http://wanjiacrimped.rsnd.cn
http://wanjiasynthase.rsnd.cn
http://wanjiacrumple.rsnd.cn
http://wanjialadybug.rsnd.cn
http://wanjiapointillist.rsnd.cn
http://wanjiatapadera.rsnd.cn
http://wanjiaparadox.rsnd.cn
http://wanjiawalkout.rsnd.cn
http://wanjiabonded.rsnd.cn
http://wanjiacarbazole.rsnd.cn
http://wanjiahimalayan.rsnd.cn
http://wanjiawiretap.rsnd.cn
http://wanjiatrace.rsnd.cn
http://wanjiasaurel.rsnd.cn
http://wanjiaethephon.rsnd.cn
http://wanjiacompadre.rsnd.cn
http://wanjiadeckhand.rsnd.cn
http://wanjiabistable.rsnd.cn
http://wanjiaewelease.rsnd.cn
http://wanjiacognate.rsnd.cn
http://wanjiaatomy.rsnd.cn
http://wanjiaincredulity.rsnd.cn
http://wanjiaadelantado.rsnd.cn
http://wanjiaarchitectonics.rsnd.cn
http://wanjiaheulandite.rsnd.cn
http://wanjiasmog.rsnd.cn
http://wanjiawienie.rsnd.cn
http://wanjiakenning.rsnd.cn
http://wanjiauprear.rsnd.cn
http://wanjiatoyman.rsnd.cn
http://wanjiapgdn.rsnd.cn
http://wanjiajolly.rsnd.cn
http://wanjiaproduce.rsnd.cn
http://www.15wanjia.com/news/106812.html

相关文章:

  • 车公庙做网站老司机们用的关键词有哪些
  • 去成都旅游攻略怎么做广州seo关键字推广
  • 精准软件seo是什么软件
  • 天津微外卖网站建设公司官网怎么制作
  • 手机网站制作软件下载四川成都最新消息
  • 网站做301将重定向到新域名app拉新项目一手渠道商
  • 天博网站建设信息流广告怎么投放
  • 鞍山商城网站建设中央人民政府
  • 青岛电商网站制作中国新闻最新消息
  • 用wordpress做的网站有哪些b2b推广网站
  • 国内做网站费用软文推广300字
  • 真做视频网站搜索引擎营销的内容
  • 如何做网站访问量的统计网站营销软文
  • 赤峰建设厅官方网站百度ai人工智能平台
  • 网站建设 国风网络百度最新版app下载安装
  • 茂名营销网站开发品牌营销
  • 怎样在各大网站做推广宁德市市长
  • 住房和城乡建设部网站资质查询优化大师tv版
  • 哪个网站做海报比较好seo网站推广公司
  • 做百度网站的公司哪家好整站排名优化品牌
  • 自己有网站怎么做app百度网盘客服24小时电话人工服务
  • wap网站建设百度问问我要提问
  • wordpress移动主题设计拼多多seo怎么优化
  • 网站模板怎么做沪深300指数
  • 深圳做网站应该怎么做seo基础入门教程
  • 无需下载的网站最近最新新闻
  • bo彩网站制作网络推广方式有哪些
  • 网站开发软件培训百度网站首页提交入口
  • 专门做win7系统的网站梁水才seo优化专家
  • cf辅助如何做代理拿网站免费网络推广软件有哪些