国外服务器直播网站,海外直播服务器搭建

国外服务器直播网站,海外直播服务器搭建背景:最近有个朋友的APP需要在国外搭建一个直播服务器,因为他们的主播在韩国(主播主要是记者),而观众主要在国内,叫我帮忙给他们开发一个直播服务器。目前开源的直播服务程序有:SRS,Nginx-rtmp;如果是做开发的同学应该有所了解,SRS是基于C++写的,Nginx-rtmp模块是Ngxin的第三方C模块。一开始我是直接部署SRS/Ngxin-rtmp到我的韩国的服务器,结果直播rtmp或者…

大家好,又见面了,我是你们的朋友全栈君。

背景:

最近有个朋友的APP需要在国外搭建一个直播服务器,因为他们的主播在韩国(主播主要是记者),而观众主要在国内,叫我帮忙给他们开发一个直播服务器。

目前开源的直播服务程序有:SRS,Nginx-rtmp;如果是做开发的同学应该有所了解,SRS是基于C++写的,Nginx-rtmp模块是Ngxin的第三方C模块。一开始我是直接部署SRS/Ngxin-rtmp 到我的韩国的服务器,结果直播rtmp或者hls都不理想,经常卡顿,究其原因,还是因为这些协议都是基于TCP,一旦遇到丢包啥的,效果就非常差。

这里,我主要介绍下外海直播常用的场景,以及基于KCP协议的国外直播服务器。

一、海外直播服务器的常用场景:

1)、主播和观众都在国内

适用于客户和观众都在国内,但需要把直播服务器架在海外的客户。直播服务器需要支持传统协议:RTMP、HLS、HTTP-FLV;应用场景如下图所示:

6c14fe661d2a9cb0838d460cf8257c60.png

2)、主播在国外、观众在国内

适用主播在国外,观众在国内,但需要把直播服务器架在海外的客户。

069d64c88f422949423fd63bb85151b1.png

三、基于KCP协议的海外直播服务器

为了给朋友搭建一个效果较好的海外直播服务器,我特意学习了一遍KCP协议,帮忙写了APP端的SDK。最终效果还是很棒。我介绍下我开发的流媒体服务的功能:

采用KCP协议作为传输层,具有超强的弱网传输能力和超低的延迟

支持NMS服务之间通过kmp协议进行中继转发

支持推流与播放

SDK版Andorid、IOS全系支持

空一点我拍个视频出来给大家看下效果。大家如果想要讨论技术底层的话可以加WX:stefan1240。貌似只有KCP协议才能达到一个比较好的效果,别的都不太行。

附录:KCP协议

type segment struct {

conv uint32

// 发送端与接收端通信时的匹配数字,发送端发送的数据包中此值与接收端的conv值匹配一致时,接收端才会接受此包

cmd uint8

// 改数据包的协议号,协议号有以下枚举:

// IKCP_CMD_PUSH = 81 // cmd: push data,数据包

// IKCP_CMD_ACK = 82 // cmd: ack,确认包,告诉对方收到数据包

// IKCP_CMD_WASK = 83 // cmd: window probe (ask),询问远端滑动窗口的大小

// IKCP_CMD_WINS = 84 // cmd: window size (tell),告知远端滑动窗口的大小

frg uint8

// 分帧号,由于udp传输有数据包大小的限制,因此,应用层一个数据包可能被分为多个udp包

制自己接下来发送数据的大小wnd uint16

// 滑动窗口的大小

// 当Segment做为发送数据时,此wnd为本机滑动窗口大小,用于告诉远端自己窗口剩余多少

// 当Segment做为接收到数据时,此wnd为远端滑动窗口大小,本机知道了远端窗口剩余多少后,可以控

ts uint32

// timestamp , 当前Segment发送时的时间戳

sn uint32

// Sequence Number,Segment数据包的编号

una uint32

// una即unacknowledged,未确认数据包的编号,表示此编号前的所有包都已收到了。

rto uint32

// rto即Retransmission TimeOut,即超时重传时间,在发送出去时根据之前的网络情况进行设置

xmit uint32

// 基本类似于Segment发送的次数,每发送一次会自加一。用于统计该Segment被重传了几次,用于参考,进行调节

resendts uint32

// 即resend timestamp , 指定重发的时间戳,当当前时间超过这个时间时,则再重发一次这个包。

fastack uint32

// 用于以数据驱动的快速重传机制;

// len uint32 c++版本有数据包的数据长度,go版本无此字段

data []byte}

// 协议数据的具体内容

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144848.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UML旅游管理系统「建议收藏」

    UML旅游管理系统「建议收藏」一、需求概述1.1项目概述随着人们的生活质量的逐步提高,外出旅游成为人们生活中不可或缺的一项活动。开发一个旅游管理系统可以为大家提供便捷的途径。系统管理员可以发布和管理旅行路线。旅客可以查询路线,预定路线。1.2用户需求分析分析的系统的参与者有系统管理员、会员、普通用户三个群体。分别对三个群体的需求进行具体分析。系统管理员:管理员作为系统的管理者。需要对线路的数据库进行管理。比如发布新的线路,对不需要的线路进行删除、修改线路的具体信息。对于已经发布的线路,系统管理员可以查看预定的情况。同

    2022年6月12日
    27
  • Linux常见面试题

    Linux常见面试题

    2022年2月11日
    39
  • ajax cors跨域_jquery跨域

    ajax cors跨域_jquery跨域两种跨域方法在Javascript中跨域访问是比较常见的事情就像现在比较流行写单页应用,而单页应用在访问API的时候就会有跨域的问题要解决跨域的问题,其实也并不复杂,有两种方案可以选择Jsonp跨域Jsonp的实现原理就是:创建一个回调函数,然后在远程服务上调用这个函数并且将JSON数据形式作为参数传递,完成回调。CORS(跨域资源共享)跨源资源共享标准通过新增一系列HTTP头…

    2022年8月24日
    3
  • c++拷贝构造函数

    c++拷贝构造函数

    2021年9月29日
    42
  • JavaScript 高级程序设计(第3版)

    JavaScript 高级程序设计(第3版)内容简介ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性。《JavaScript高级程序设计(第3版)》这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript语言实现的各个组成部分——语言核心、DOM、BOM、事件模…

    2022年8月20日
    3
  • hostapd和dhcpd

    hostapd和dhcpdhostapd.conf#####hostapdconfigurationfile##############################################interface=wlan0ctrl_interface=/var/run/hostapdssid=rtwapchannel=6wpa=2wpa_passphrase=87654321#bridge=br0

    2022年5月21日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号