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

国外网站 icp备案wordpress跳转链接插件汉化

国外网站 icp备案,wordpress跳转链接插件汉化,wordpress最佳服务器配置,重庆市造价工程新希望官网1. 前言 市面上的开源RTSP服务器太过于复杂,我们今天使用GO语言,开发一款史上最简单的RTSP直播服务器,不依赖任何第三方GO语言框架,使用原生GO语言撸。 说起视频直播协议,最开始,笔者使用的是ffmpeg ngi…

1. 前言

市面上的开源RTSP服务器太过于复杂,我们今天使用GO语言,开发一款史上最简单的RTSP直播服务器,不依赖任何第三方GO语言框架,使用原生GO语言撸。

说起视频直播协议,最开始,笔者使用的是ffmpeg + nginx(RTMP)方案,但是nginx的RTMP模块有个问题,至少要六七秒才能够出画面,不知道是RTMP协议问题还是nginx的rtmp模块问题。过一段时间,我再用go语言撸一个RTMP服务器。

由于ffmpeg + nginx的上述缺点,所以我又转向了EasyDarwin的RTSP服务器方案,也就是ffmpeg + EasyDarwin(RTSP)方案,相比之下RTSP可以在两秒之内出现画面,超乎我的意料。

过了一段时间之后,发现EasyDarwin也有一些缺点,由于我需要鉴权、推流回调、播放回调,而且好像EasyDarwin在github上并没有注明是否可以商用,因此使用EasyDarwin也有一定的风险。

综上所述,我决定开发一款自己的RTSP服务器,首选语言当然是GO语言了,而且我决定不引用任何第三方框架,纯用原生GO撸。

其实我觉得,flash已经被抛弃了,相应的RTMP协议也应该被抛弃,RTMP播放延迟高,而且打开速度慢,相比之下RTSP协议延迟在1秒以内,打开速度超快。

2. RTSP

说到RTSP,不得不说到RTP(实时传输协议),RTP是用来传输视频帧数据。但是,在很多场景下,我们要和服务器进行一些其他交互,比如控制RTP传输,然后RTSP协议就诞生了,RTSP类似于HTTP协议,在传输RTP视频帧之前,双方先进行RTSP协议 交互,RTSP协议交互完成后,然后推流端不断发送RTP视频帧给RTSP服务器,拉流端则等待RTSP服务器发送RTP视频帧。

说到底,RTSP协议 = RTSP(字符串协议,类似HTTP)数据+ RTP(二进制协议)数据,其中,RTP数据原样转发就行,推流端推过来的RTP数据,服务器原样转发给播放段就行。不同的是,推流端和播放端,首先要采用RTSP协议,和服务器进行几个回合的交互,交互完成后,就轮到RTP二进制数据了。

我们这里不考虑RTSP走UDP协议,我在其它文章中测试过,UDP非常容易丢帧,而且容易花屏,受限制太多,因此我们这里只考虑基于TCP的RTSP协议。

RTSP官方给的命令太多,我们这里不考虑点播,只考虑直播。

对于一个完整的RTSP直播系统来说,有推流端(Pusher)、服务器端(Server)、播放端(Player)

3. 推流端

推流端的工作流程如下:

3.1 OPTIONS

          推流端发送:

       

OPTIONS rtsp://192.168.1.201:5545/2_1 RTSP/1.0\nCSeq: 1\nUser-Agent: Lavf58.37.100\n\n

需要注意的是,\n是回车符,这是我特意标注出来的,在下面我就不把回车符显示出来了,凡是换行,必有回车符

        RTSP回应:

RTSP/1.0 200 OK
CSeq: 1
Session: ZTnZLWlGg
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD

在回应消息中,Session是在此时RTSP服务器生成的,在推流端整个连接周期内,都使用这个Session

3.2 ANNOUNCE

       推流端发送:

ANNOUNCE rtsp://192.168.1.201:5545/2_1 RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: Lavf58.37.100
Session: ZTnZLWlGg
Content-Length: 296v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.1.201
t=0 0
a=tool:libavformat 58.37.100
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z00AKp2oHgCJ+WbgICAoAAADAAgAAAMBlCA=,aO48gA==; profile-level-id=4D002A
a=control:streamid=0

RTSP服务器收到这个消息之后,需要把从"v=0"一直到最后,这段文字,保存起来,因为这是这个RTSP通道的sdp消息,播放端请求数据的时候,需要这个。

RTSP服务器发送:

RTSP/1.0 200 OK
CSeq: 2
Session: ZTnZlWLGg

3.3 SETUP 

   推流端发送:

SETUP rtsp://192.168.1.201:5545/2_1/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: Lavf58.37.100
Session: ZTnZLWlGg

RTSP服务器回应:

RTSP/1.0 200 OK
CSeq: 3
Session: ZTnZLWlGg
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record

3.4 RECORD

推流端发送:

RECORD rtsp://192.168.1.201:5545/2_1 RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent: Lavf58.37.100
Session: ZTnZLWlGg

RTSP服务器回应:

RTSP/1.0 200 OK
CSeq: 4
Session: ZTnZLWlGg

3.5 RTP消息

到这里,推流端就开始源源不断的发送RTP消息,RTSP服务器只需要把RTP消息转发给播放端即可,无需回应推流端消息

4. 播放端

播放端的流程:

4.1 OPTIONS 

播放端发送:

OPTIONS rtsp://192.168.1.201:5545/2_1 RTSP/1.0
CSeq: 1
User-Agent: Lavf58.37.100

RTSP服务器回应:播放端的Session,此时由RTSP服务器生成,在播放端连接周期内,保持不变

RTSP/1.0 200 OK
CSeq: 1
Session: YXN_wZ_GR
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD

4.2 DESCRIBE

播放端发送:

DESCRIBE rtsp://192.168.1.201:5545/2_1 RTSP/1.0
Accept: application/sdp
CSeq: 2
User-Agent: Lavf58.12.100
Session: YXN_wZ_GR

还记得3.2中,让保存起来的sdp消息吗,就在此时,发送给播放端。

RTSP服务器回应:

RTSP/1.0 200 OK
Session: YXN_wZ_GR
Content-Length: 296
CSeq: 2v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.1.201
t=0 0
a=tool:libavformat 58.37.100
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z00AKp2oHgCJ+WbgICAoAAADAAgAAAMBlCA=,aO48gA==; profile-level-id=4D002A
a=control:streamid=0

4.3  SETUP

   播放端发送:

SETUP rtsp://192.168.1.201:5545/2_1/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: Lavf58.37.100
Session: YXN_wZ_GR

RTSP服务器回应:

RTSP/1.0 200 OK
CSeq: 3
Session: YXN_wZ_GR
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record

4.4 PLAY

播放端发送:

PLAY rtsp://192.168.1.201:5545/2_1 RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent: Lavf58.12.100
Session: YXN_wZ_GR

RTSP服务器回应:

RTSP/1.0 200 OK
Session: YXN_wZ_GR
Range: npt=0.000-
CSeq: 4

4.5 RTP消息

接下来,RTSP服务器只需要把3.5中接受到的RTP消息,原封不动原发给播放端即可。

5.  效果图

      5.1  服务器

      

5.2 ffmpeg推流端

    5.3 播放端

6. 代码

猛击这里,进入码云

 

http://www.yayakq.cn/news/347642/

相关文章:

  • 做装饰公司网站6网站编辑框超链接怎么做
  • 建设网站多久wordpress手动安装插件
  • 济南网站建设 选聚搜网络南京广告制作公司
  • 创建网站需要什么条件手机网站 数据库
  • 教做黏土手工的网站南通网站建设制作公司
  • 网站开发服务商廉洁四川官方网权威发布
  • 巨野住房和城乡建设局网站让顾客进店的100条方法
  • 苏州网站建设万户建设个人网站的参考网站及文献
  • 外贸英文建站开个小门面装修找谁
  • 做坑人网站二维码做墙报的网站
  • 创做网站做 淘宝客最大的网站是叫什么名字
  • 外贸网站 seojsp项目个人网站开发
  • 免费网站生成软件wordpress主题lenews
  • 网络教育网站建设方案好的摄影作品网站
  • 永康网站建设制作免费网站在线观看人数在哪买
  • 大连网站建设在线少儿编程培训加盟品牌费用
  • 上门做网站公司长沙景点
  • 设计公司网站建设方案做网站需要什么花费
  • 做音乐网站的目的和意义seo这个职位是干什么的
  • 长沙企业建站招聘信息免费诶网站建设
  • 做响应式网站的框架南通建设企业网站
  • 华为云怎么建网站成都网站建设公司好做吗
  • 猪八戒托管赏金做网站如何去推广自己的产品
  • 网站建设颜色代码表福州思企互联网站建设公司
  • 网站有没有做网站地图怎么看织梦网站后台打不开
  • 做网站和视频剪辑用曲面屏建设银行信用卡网站是多少钱
  • 郑州百度网站推广站酷网站的比赛网页谁做的
  • 网站备案要拍照大家怎么做的啊html5网站引导页模板
  • 宁夏建设网站公司公司网站要怎么做
  • 郑州网站建设市场广州网站设计首选刻