前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过替换推拉流库解决EasyDSS虚拟直播卡顿及不稳定的问题过程

通过替换推拉流库解决EasyDSS虚拟直播卡顿及不稳定的问题过程

原创
作者头像
TSINGSEE青犀视频
修改2021-06-02 17:57:57
6210
修改2021-06-02 17:57:57
举报
文章被收录于专栏:TSINGSEE青犀视频

推流平台EasyDSS里有个直播的类型叫虚拟直播,虚拟直播的直播源有两种类型,一个是点播资源,一个是在线资源。点播资源可以从EasyDSS里的点播服务里面去配置,在线资源必须是直播的源地址。

部分用户采用虚拟直播功能,当直播路数过多时,会出现卡顿问题,或者直播不稳定的问题。对此问题我们也进行了分析,原来的EasyDSS虚拟直播是采用FFmpeg方式来转码推流,内存占用高、不稳定,因此我们决定更换推拉流库,采用Nginx推拉流库,可以优化原本EasyDSS虚拟直播的问题。

Nginx优点: 1.可以高并发连接,官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。 2.稳定性高。 3.内存消耗低。

虚拟直播推拉流的步骤:

a.接收到客户端开启虚拟直播的请求,后端对数据验证判断,并从数据库查找对应的虚拟直播记录。

b.根据这条虚拟直播记录新建一个ChannelInfo结构体,ChannelInfo包封装了推拉流的信息。

代码语言:javascript
复制
type ChannelInfo struct {
   Channel             string
   Name                string
   Online              int
   SnapURL             string
   ErrorString         string
   lock                sync.RWMutex
   delayTimer          *time.Timer
   stopRecordTimer     *time.Timer
   stopCMSRecordTimer  *time.Timer
   quit                chan bool
   snapTime            time.Time
   touchTime           time.Time
   cmsSnapTime         time.Time
   cleanSnapTime       time.Time
   cleanSnapDuration   time.Duration
   cleanRecordTime     time.Time
   cleanRecordDuration time.Duration
   snapTimeout         time.Duration
   snapDuration        time.Duration
   connectDuration     time.Duration
   loopDuration        time.Duration
   cmsSnapDuration     time.Duration
   touchDuration       time.Duration
   cmsSnapFunc         CMSSnapFunc
   vlive               *dao.TVlive
   client              *stream.StreamClient
   recordclient      *stream.StreamClient
   GbsId                  string
   gbsLiveStreamClient    *stream.StreamClient
   gbsRecordStreamClients map[string]*stream.StreamClient
   gbsRecordStreamM3u8    map[string]string
   // add by rookie for gbs
   localPusher     *stream.StreamPusher
   cdnPusher       *stream.StreamPusher
   recordPusher    *stream.StreamPusher
   cmsPusher       *stream.StreamPusher
   cmsRecordPusher *stream.StreamPusher
}

c.调用cgo代码开启拉流,推流:

拉流回调函数:

推流调CGo函数:

d.最后修改该条虚拟直播的状态为正在直播并保存到数据库中;

成功则状态为” living”:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档