9 win_lin

尚未进行身份认证

从现在起,做更好的自己

等级
TA的排名 3k+

当SRS遇到K8S,快速高效运营直播流媒体集群

HOME > CN > K8sK8s[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtZC2Ubo-1581839527762)(https://cloud.githubusercontent.com/assets/2777660/22814959/c51cbe72-ef92-11e6-81cc-32b657b285d5.png)]流媒体服务和...

2020-02-16 15:53:17

Go开发关键技术指南

Go开发关键技术指南原图链接地址:https://www.processon.com/view/link/5df22829e4b010171a411e7d#map感谢阿里巴巴云原生微信公众号转载了这篇文章,给了很重要的改进建议,从Markdown转微信公众号也做了大量工作,配图和排版让阅读变成一种享受。如果你更习惯微信阅读,可以读下面四章:Go 开发关键技术指南 | 为什么你要选择 G...

2020-01-10 19:33:48

JetBrains的CLion,C++的IDE,给linux程序员的福音

JetBrains终于放出来c++的IDE了。目前是60天的预览版,下载:http://www.jetbrains.com/clion/CLion的主要亮点:windows下linux程序的IDE。别纠缠vs是不是王中之王,用vs打开srs代码错误就一坨一坨的,没法正常使用。 可以忽略编译,当作编辑器使用。windows下的linux代码无法编译过,mingw有时也不好使,但是CL...

2014-09-26 15:07:37

FFMPEG推送rtmp流实例

165行代码说明使用ffmpeg的api如何将文件推送到rtmp服务器。执行:./objs/tool /home/winlin/test_22m.flv rtmp://dev:1935/live/livestream1等价于:ffmpeg -re -i /home/winlin/test_22m.flv -vcodec copy -acodec copy -f fl...

2013-10-11 12:25:52

python,mysql,MySQLDb支持中文(utf-8编码)

只要使用utf-8编码,就可以支持中文。我们的软件都是跑在linux上面的,都是utf-8,所以支持中文就是如何支持utf-8的。python默认编码:是系统编码,所有有些机器不是utf-8的(可能没有中文原因,是ASCII编码)。Mysql默认是latin1编码,很简单,开发商是瑞典公司。让python的编码设为utf-8,在最开始运行:import sys;# set t...

2011-08-14 17:57:01

C++中正确使用PRId64

例子参考高性能流媒体服务器SRS:https://github.com/winlinvip/simple-rtmp-serverSRS中广泛使用PRId64实现32和64位系统通用。c++使用PRID64,需要两步:包含头文件:<inttypes.h> 定义宏:__STDC_FORMAT_MACROS,可以通过编译时加-D__STDC_FORMAT_MACRO...

2012-08-27 16:25:35

GOLANG探测HTTP连接断开

考虑基于HTTP的RPC,或者HTTP服务器主动通知客户端的机制,就是HTTP Long-Polling,意思就是客户端发起一个长连接,服务器阻塞忍住不响应直到:超时,比如5秒后,我们给客户端响应一个keepalive,意思是现在还没有啥事,请继续polling。拿到结果,这个可能是任何时候,比如300毫秒、1100毫秒、2300毫秒拿到一个事件,响应给客户端,实现了有事件异步通知。这样客户端

2017-11-22 12:25:04

GOLANG实现的HTTP转HTTPS的代理

有时候需要将后端的HTTP服务,转成HTTPS,可以用一个代理。 Reamark: 如果是GOLANG的后端服务,可以直接用库go-oryx-lib/https。这个代理支持自签名的证书,也支持letsencrypt的证书。 Remark: Letsencrypt只支持少量域名的情况,比如自己的网站,它会有请求次数限制,另外CA是letsencrypt的,商业用户不适合用。我们有个HTT

2017-10-13 12:14:54

GOLANG中time.After释放的问题

原文:https://gocn.io/article/403在谢大群里看到有同学在讨论time.After泄漏的问题,就算时间到了也不会释放,瞬间就惊呆了,忍不住做了试验,结果发现应该没有这么的恐怖的,是有泄漏的风险不过不算是泄漏,先看API的说明:// After waits for the duration to elapse and then sends the current time//

2017-07-29 11:59:36

Testivus On Test Coverage

原文:点这个链接Testivus On Test Coverage一天早上,一个程序员问大师:我准备要写单元测试了,请问我要达到多少覆盖率呢?大师回答说:不用担心覆盖率了,写出来有效的单元测试就好了。程序员笑了,向大师鞠躬,然后愉快的去干活了。过了一会儿,第二个程序员向大师问了同样的问题。大师指着小米牌智能电饭锅,对程序员问道:我该放多少米呢?程序员迷茫的回答道:我怎么知道呢?这处决于多少人吃饭,他

2017-07-06 15:17:00

GOLANG使用Context实现传值、超时和取消

原文:https://gocn.io/article/373GO1.7之后,新增了context.Context这个package,实现goroutine的管理。Context基本的用法参考GOLANG使用Context管理关联goroutine。实际上,Context还有个非常重要的作用,就是设置超时。比如,如果我们有个API是这样设计的:type Packet interface { e

2017-06-28 16:25:22

Fire And Motion:聚焦前进,避免当炮灰

Fire And Motion2002年01月06日,JOEL SPOLSKY,Trello联合创始人,如果大神你不知道Trello是什么,那么你肯定知道Stack Overflow,嗯,我是StackOverflow的CEO。有时候,我就是啥事也没有干出来,啥事也没有干成。和你一样,我每天可是准时按点到公司,到处晃悠晃悠,然后回到我的座位上,每隔几分钟看看邮箱,然后看看微信朋友圈,读读今日头条,有

2017-06-26 13:49:53

GOLANG宽泛接口在测试中的大用处

原文:https://gocn.io/publish/article/368考虑测试一个函数:func request(ctx context.Context, hc *http.Client, api string) (err error) { var hreq *http.Request if hreq, err = http.NewRequest("GET", api, nil

2017-06-23 17:27:31

GOLANG测试必须用带堆栈的errors

原文:https://gocn.io/article/366GOLANG测试时,可以用匿名对象填充测试序列,但是如果没有带堆栈的errors,那么会造成出现错误时无法排查。先看测试序列的填充,参考tricks-2015这个文章,怕你翻不了墙,我把内容粘贴过来就是:Anonymous structs: test cases (1/2)These properties enable a nice way

2017-06-22 18:11:45

GOLANG最容易做测试MOCK

原文:https://gocn.io/article/353测试时,一些底层的库非常难以MOCK,比如HASH摘要算法,怎么MOCK?假设有个函数,是用MD5做摘要:func digest(data []byte, h hash.Hash) ([]byte, error) { if _, err = h.Write(data); err != nil { return nil

2017-06-09 18:27:32

GOLANG空指针崩溃时堆栈消失和解决方案

原文:https://gocn.io/article/351在错误处理这个文章中,tkk提出了空指针时堆栈消失的问题,看下面的例子:package mainfunc main() { run() // line 4}func run() { causedPanic()}func causedPanic() { //defer func() {}() // line 1

2017-06-07 17:06:25

GOLANG错误处理最佳方案

原文:https://gocn.io/article/348ERRORGOLANG的错误很简单的,用error接口,参考golang error handling:if f,err := os.Open("test.txt"); err != nil { return err}实际上如果习惯于C返回错误码,也是可以的,定义一个整形的error:type errorCode intfunc

2017-06-05 10:06:41

函数式组合编程,完胜类体系编程

考虑打印MP4各种BOX的实现,一种是类似类体系,用函数重载来实现:template<typename T>stringstream& __srs_print_mp4_vector(std::vector<T>& arr, stringstream& ss, int level, bool is_box){ for (size_t i = 0; i < arr.size(); i++)

2017-05-30 18:33:47

timeval和timespec转换

条件等待时,调用pthread_cond_timedwait,需要从timeval转换为timespec,如果转换错误,会导致条件等待失败返回22,正确的转换方式是:void wait(pthread_cond_t* cond, pthread_mutex_t* lock, uint32_t timeout_ms){ pthread_mutex_lock(lock);

2017-05-27 21:11:09

GOLANG使用Context管理关联goroutine

原文:https://gocn.io/article/333一般一个业务很少不用到goroutine的,因为很多方法是需要等待的,例如http.Server.ListenAndServe这个就是等待的,除非关闭了Server或Listener,否则是不会返回的。除非是一个API服务器,否则肯定需要另外起goroutine发起其他的服务,而且对于API服务器来说,在http.Handler的处理函数中

2017-05-19 15:09:06

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。