GO
文章平均质量分 87
梦之风舞者
我就是我自己
展开
-
RTSP服务器开发二:关键帧提取技术
1. 前情提要在这篇文章中,我着重阐述了,如何使用GO语言,从零开发一个RTSP服务器。今天,我们继续对它进行改造。2. 关键帧通俗来讲,播放端在开始播放时,会持续不断接受到视频帧,但是只有关键帧到来时,它才会出画面,也就是说,关键帧什么时候到来,决定了什么时候出现画面。那么,既然RTSP服务器是我们手写的,能不能服务器提前缓存好最后一个关键帧,当播放端连接时,立马把缓存的最后一个关键帧发送给播放端。实测证明,这样做是可行的,点击播放按钮的下一刻,画面就出来了,完全不需要任何等待。3.原创 2021-04-03 13:33:48 · 1423 阅读 · 3 评论 -
600行代码开发一个史上最简单的RTSP服务器(GO语言纯原生语法)
1. 前言市面上的开源RTSP服务器太过于复杂,我们今天使用GO语言,开发一款史上最简单的RTSP直播服务器,不依赖任何第三方GO语言框架,使用原生GO语言撸。说起视频直播协议,最开始,笔者使用的是ffmpeg + nginx(RTMP)方案,但是nginx的RTMP模块有个问题,至少要六七秒才能够出画面,不知道是RTMP协议问题还是nginx的rtmp模块问题。过一段时间,我再用go语言撸一个RTMP服务器。由于ffmpeg + nginx的上述缺点,所以我又转向了EasyDarwin的RTS原创 2021-03-31 09:38:01 · 5575 阅读 · 7 评论 -
GO: 整数时间转字符串时间
func Inttime2Str(timestamp int64)(string){ //日期转化为时间戳 timeLayout := "2006-01-02 15:04:05" //转化所需模板 datetime := time.Unix(timestamp, 0).Format(timeLayout) return datetime}原创 2020-10-28 09:32:38 · 519 阅读 · 0 评论 -
GO:字符串日期转整数时间戳
func Strtime2Int(datetime string)(int64){ //日期转化为时间戳 timeLayout := "2006-01-02 15:04:05" //转化所需模板 loc, _ := time.LoadLocation("Local") //获取时区 tmp, _ := time.ParseInLocation(timeLayout, datetime, loc) timestamp := tmp.Unix() //转化为时间戳 类型是int64 .原创 2020-10-28 09:31:50 · 764 阅读 · 0 评论 -
GO语言学习心得
最近一个月,迫于高并发压力,重新上手GO语言,还别说,GO语言确实写的很爽。1. 面向项目GO语言并不是一个研究院语言,它不是给一些学者、专家看的,也不是让你深究它为什么没有泛型,为什么没有类,为什么重载、继承不好用。它就是让你为了解决一个项目问题而产生的语言,比如,我们觉得,一个好的项目源代码应该是有底层实现类、中间接口类、上层类等等,金字塔结构。但是很抱歉,GO是平面化语言,最多二层架构,不会让你继承一大堆类,而是让你用一个文件夹,将该功能所用的所有接口放在里面,然后直接使用。2..原创 2020-10-24 11:58:13 · 924 阅读 · 0 评论 -
GO语言的websocket数据解析
最近在学GO语言,需要开发websocket服务器,不想用第三方的websocket服务器框架,准备使用原生TCP硬撸一个websocket服务器。websocket是基于tcp的协议,对tcp包进行了封装,因此,使用原生tcp服务器,是可以搞定websocket服务器的。websocket最关键的三个步骤:首次websocket握手、将tcp客户端发来的数据解析成websocket数据、将数据加密成webscoket数据发送给tcp客户端。websocket 握手:func (t.原创 2020-10-14 11:05:32 · 1248 阅读 · 0 评论