live555多线程实现

早期想实现一个流媒体服务器,看了live555的代码,它是个单线程的,不适合在服务器上的高并发要求,要想完全改成多线实现live555,整个网络上搜索个遍,都没有到。偶尔有几个实现了的,其实现方式也并非真正意义上的多线程,没有充分发挥多线程的效率。

     下面我来简述真正多线程实现live555的思路。

socket方面完全取消TaskScheduler的select模式。采用epoll或者windows下的完成端口模型。

doEventLoop函数绝对不能调用,里面是个死循环,持续等待一个变量的值发生变化,严重影响性能。

完全多线程时,共享资源需要使用引用记数,这与com接口开发一样。

每个RTSPServer有一个独立的线程负责监听tcp 连接请求,N个接收数据的线程,多处理其它逻辑的线程。

当使用rtsp over tcp时,每个客户端的请求只对应一个tcp连接,此时只需要在当前tcp收到数据时锁住当前会话,并进行逻辑处理。多个不同的tcp连接互相独立,不会互锁。直到访问共享资源时才加多个会话之间的锁。

当使用rtsp over udp时,每个客户端的会话在服务器端由一个tcp连接加多个udp组成。此时同一个会话的tcp和udp需要共享同一个锁。多个不同的会话互相独立,不会互锁。

加入事件处理模型:当发生特定的事件时,能唤醒线立即执行相关的逻辑。比如以30帧/秒向客户端发送视频流时,每帧发送完,线程就会进入wait状态。接收到下一帧的事件,才会唤醒线程继续发送视频流。

本人实现的流媒体服务器支持rtsp,rtmp及flv,mp4存储,时间有点久了,一时只能记起来这些,更多的细节点后面再补充上。

要完整实现以上功能,需要对live555,socket,多线程互锁与通讯,完成端口或epoll模型都非常熟悉。更多技术交流可加  qq  群   384170753

以下为调试运行截图,后面再分享更多的细节。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值