前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络穿透/组网服务/视频协议转换系统EasyNTS上云网关时如何实现视频拉转推?

网络穿透/组网服务/视频协议转换系统EasyNTS上云网关时如何实现视频拉转推?

原创
作者头像
TSINGSEE青犀视频
修改2021-04-01 10:13:09
3920
修改2021-04-01 10:13:09
举报
文章被收录于专栏:TSINGSEE青犀视频

早在去年,我们就将EasyNTS的网络穿透功能和原本EasyRTMPLive的视频拉转推功能进行了融合,统称为EasyNTS上云网关。因此EasyRTMPLive仍有软件版本,但是在通道数量不高的情况下,我们仍建议大家选择更轻便的EasyNTS上云网关。

此前介绍了视频拉转推的操作方法,但是一直没有和大家分享我们的实现思路,所以本文我们就和大家分享一下。

EasyNTS上云网关是通过调用拉流库然后调用推流库来实现的该功能,重点是需要加载推拉流库。对于加载推拉流库有两种方式,第一种是加载dll文件实现,第二种是编译.a文件的静态库,实现golang调用c的接口然后接收c端的回调之后进行逻辑操作。

先拉取源地址的流,初始化拉流库,然后将得到的流推送到对应的rtmp地址,参考代码如下:

代码语言:javascript
复制
srcURL := channelInfo.SrcURL
// escape + to %2B
srcURL = strings.Replace(srcURL, "+", "%2B", -1)
client := stream.NewStreamClient(fmt.Sprintf("%s - 拉流", channelInfo.Name), srcURL, uint(channelInfo.ID), uint(channelInfo.ConnectTimeOut))
switch channelInfo.ConnectType {
case "tcp":
   client.TransType = stream.TransTypeTCP
case "udp":
   client.TransType = stream.TransTypeUDP
}
client.AudioEnable = channelInfo.MediaType == "video|audio"
_channelInfo := *channelInfo
channelStream = &ChannelStream{
   Channel:     uint(channelInfo.ID),
   Name:        channelInfo.Name,
   Online:      0,
   ErrorString: "",
   channelInfo: &_channelInfo,
   client:      client,
   quit:        make(chan bool, 1),
}
channelStream.InitPushers(channelInfo)
var exist bool
channelsLock.Lock()
if _, exist = channelSteams[channelStream.Channel]; !exist {
   channelSteams[channelStream.Channel] = channelStream
} else {
   log.Printf("%v is already exist", channelStream)
}
channelsLock.Unlock()
if exist {
   return
}
channelStream.delayTimer = time.AfterFunc(delay, channelStream.Start)
return

EasyNTS作为网络穿透服务以及视频流拉转推产品,目前支持市面上大部分的RTSP/Onvif协议设备:IP Camera/NVR/DVR/编码器等,用MQTT加密协议,具有运算速度快,安全性高,资源损耗低的优势,且基于动态组网服务创建智能网络,按需选择需要组网的网络成员实现点点互联。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档