![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
百万级高并发WebRTC流媒体服务器设计与开发
文章平均质量分 80
百万级高并发WebRTC流媒体服务器设计与开发
::呵呵哒::
菜鸡一个
展开
-
8 https服务器的实现
这个代码核心就是我们首先监听一个8000接口,然后再服务器上访问这个接口,会得到一些https头文件。之后我们定义该目录为http的根目录,然后就可以访问该目录下的html文件了。如果我们要做一个http服务器的话,我们要注意几点。然后我们回复一个html,再网页上显示。原创 2024-06-26 21:34:37 · 189 阅读 · 0 评论 -
7 reactor服务器模型
接上节课,上节课中,我们使用了epoll实现了同时监听多个文件描述符,是对IO的管理,也提到了reactor是对事件的管理,那具体来说是怎样的呢?reactor是事件驱动模型,也就是EPOLLIN/EPOLLOUT,同时,我们应该维护一种结构,对于每个fd,都应该有这样一种记录该fd相关的结构。再往后,为了提高处理能力,我们可以将clientfd相关的读写操作放到子线程去做,而主线程只负责appect等等,这就涉及到不同的网络编程模型,之后再谈。接收和发送回调同理。原创 2024-06-26 16:42:40 · 225 阅读 · 0 评论 -
20. mediasoup服务器的布署与使用
服务端提供3个服务:1.www服务,浏览器通过访问服务器目录获取客户端代码,通过V8引擎,启动底层WebRTC2.nodejs提供websocket服务和http服务,用于信令交互3.Mediasoup C++提供的流媒体服务,用于音视频的分享与抓取。原创 2024-06-16 15:25:54 · 581 阅读 · 0 评论 -
19. 各流媒体服务器对比
WebRTC 本身提供的是 1 对 1 的通信模型,在 STUN/TURN 的辅助下,如果能实现 NAT 穿越,那么两个浏览器是可以直接进行媒体数据交换的;如果不能实现 NAT 穿越,那么只能通过 TURN 服务器进行数据转发的方式实现通信。目前来看,Google 开源的用于学习和研究的项目基本都是基于 STUN/TURN 的 1 对 1 通信。如果你想要通过 WebRTC 实现多对多通信,该如何做呢?原创 2024-06-14 21:18:42 · 924 阅读 · 0 评论 -
18. SDP协议
SDP(Session Description Protocol)它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息。原创 2024-06-13 11:38:56 · 854 阅读 · 0 评论 -
17 媒体协商过程
我们要弄清楚媒体协商过程,首先要认识我们WebRTC中最重要的一个类RTCPeerConnection。媒体协商过程媒体协商的过程在我们使用RTCPeerConnection这个方法之前呢,我们要了解他的协议是什么,媒体是怎样协商出来的?我们再看这些API的时候就知道这个调用是非常简单了,否则的话,你即使拿到了这些API,也不知道怎么用。但是它的协商过程呢,就如这张图所示对于这两个端来说,一个假设是A,第二个是B。原创 2024-06-12 20:58:04 · 723 阅读 · 0 评论 -
16 DTLS协议
非对称加密就是公钥上的锁,私钥才能打开,私钥上的锁公钥才能打开。比如说就是地下党接头的时候,把一个信息放在盒子里,然后这个盒子只有我能打开,这个盒子谁都可以放信息,但是只有要接收信息的那个人能打开。原创 2024-06-12 17:47:01 · 866 阅读 · 0 评论 -
14. RTCP 协议
BYE指示一个或者多个源退出会话。协议ID:203。参与者发送 BYE 数据包以指示一个或多个源不再活动,可选择给出离开的理由。作为可选项,BYE包可包括一个8位八进制计数,后跟文本信息,表示离开原因,如:“cameramalfunction"或"RTPloop detected”。字符串的编码与在SDES 项中所描述的相同。如字符串信息至BYE包下32位边界结束处,字符串就不以空结尾;否则,BYE包以空八进制填充。原创 2024-06-10 20:42:23 · 1010 阅读 · 0 评论 -
13 RTP包的使用
对于发送者来说,视频的每一个帧都有很多包组成。对于接收端来接收的时候是有一个队列进行接收的。这个队列大小都是通过计算的。有了队列之后就会不断的往队列中插入数据。当队列中有的数据超时一直组不成包的时候,就把他丢弃掉,当这些包没有超时的话,就一直在队列中等待,直到组成一个帧后,将该帧推出去。这时候在103,没来的时候104来了,那么把104放在自己位置上就行。107来了就放在107自己位置上,这时候如果103来了之后,组成一个帧了,这时候104有个M标志,表示前面这些可以组成一个帧,就把该帧推出去。原创 2024-06-10 17:14:14 · 199 阅读 · 0 评论 -
13. UDP协议与RTP协议
RTP(Real-time Transport Protocol)是用于 Internet 上针对多媒体数据流的一种传输层协议,RTP 协议和 RTP 控制协议 RTCP 一起使用。RTP 被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP 的典型应用建立在 UDP 上,但也可以在 TCP 或 ATM 等其他协议之上工作。原创 2024-06-10 16:02:58 · 1403 阅读 · 0 评论 -
12 TCP协议
首先我们先看看这个TCP/IP协议栈,上个博客写了IP协议头(IP Header)。原创 2024-06-08 21:13:44 · 859 阅读 · 0 评论 -
11 IP协议 - IP协议头部
IP(Internet Protocol)是一种网络通信协议,它是互联网的核心协议之一,负责在计算机网络中路由数据包,使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包,并为上层协议提供无状态、无连接、不可靠的服务。注意,IP协议负责的是数据包的路由。其作用类似于邮政系统中的邮政地址。它为数据包提供了唯一的地址,并规定了如何将数据包从发送方路由到接收方。举个例子理解一下:想象一封电子邮件从您的计算机发送到朋友的计算机。在这个过程中,IP协议充当了邮递员的角色。原创 2024-06-08 17:59:06 · 994 阅读 · 0 评论 -
10. C++异步IO处理库和使用libevent实现高性能服务器
1)basestruct event_base类型的指针,表示事件集合2)cbevconnlistener_cb类型的回调函数指针,用于处理新连接的事件,连接之后就会调用这个回调函数。其中:evconnlistener_cb类型。原创 2024-05-28 21:15:03 · 1181 阅读 · 0 评论 -
9. C++通过epoll+fork的方式实现高性能网络服务器、线程和进程的关系
epoll+fork 实现高性能网络服务器一般在服务器上,CPU是多核的,上述epoll实现方式只使用了其中的一个核,造成了资源的大量浪费。因此我们可以将epoll和fork结合来实现更高性能的网络服务器。创建子函数–fork( )要了解线程我们先来了解fork()函数:fork() 函数的功能是在当前的进程创建一个子进程;在多核时代,CPU管理多个进程,一个单核CPU同一时间只能运行一个进程,比如8 核的 CPU 只能同时运行 8 个进程。但是一个进程中可以有多个线程并行运行。原创 2024-05-27 18:01:58 · 1122 阅读 · 0 评论 -
8. C++通过epoll的方式实现高性能网络服务器
就好比接收快递一样,select就是快递员上门挨家挨户遍历去问有没有快递,而epoll不同,epoll就好比在楼下放一个箱子,然后谁有快递就将快递放在楼下箱子里面,也就是那个事件触发,就在箱子里面遍历就行。原创 2024-05-27 12:00:56 · 717 阅读 · 0 评论 -
7. C++通过select的方式实现高性能网络服务器
阻塞IO指的是用户程序将IO请求提交后,无需等待IO操作的完成,而是可以继续处理别的事情。所谓阻塞IO,是指以事件触发的机制来对IO操作进行处理。与多进程和多线程技术相比,阻塞I/O技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。我们举个例子吧:假如说我们要去读一个数据,我们要发生系统调用,然后去询问IO是否准备好了,对于阻塞I/O,如果没有准备好的话,他就会一直等,一直等,直到他准备好了。然后再进行下一步操作。原创 2024-05-26 21:18:04 · 342 阅读 · 0 评论 -
6. C++通过fork的方式实现高性能网络服务器
我们上一节课写的tcp我们发现只有第一个与之连接的人才能收发信息。他又很多的不足。原创 2024-05-26 16:35:47 · 421 阅读 · 0 评论 -
5. C++网络编程-UDP协议的实现
UDP是无连接的。原创 2024-05-25 16:39:34 · 407 阅读 · 0 评论 -
4. C++网络编程-TCP客户端的实现
C++网络编程-TCP客户端的实现原创 2024-05-25 16:15:12 · 302 阅读 · 0 评论 -
3. C++网络编程-TCPServer实现原理
二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息,是一种通用的套接字地址。sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作,使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。原创 2024-05-24 18:09:18 · 705 阅读 · 0 评论 -
2. C++服务器编程-信号
其实信号就是一个中断。就是在执行程序的时候突然来了一个信号,然后我们去执行这个新来的程序了,这就是中断。原创 2024-05-24 16:19:02 · 141 阅读 · 0 评论 -
1. C++实现一个最简单的服务器和五种I/O模型
、原创 2024-05-24 15:52:00 · 134 阅读 · 0 评论