自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OSSRS

https://github.com/ossrs

  • 博客(284)
  • 资源 (30)
  • 论坛 (1)
  • 收藏
  • 关注

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

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

2020-02-27 15:15:56 2932 1

原创 基于微信的直播方式

微信直播微信直播目前用的比较多的是微信H5直播,小程序推出后又多了一个直播的方式,特别是低延迟直播。微信H5微信H5直播播放的就是HLS,譬如写一个HTML页面放一个video标签就可以看直播。<video autoplay controls autobuffer type="application/vnd.apple.mpegurl" src="http://ossrs.net:8080/

2017-01-13 17:51:41 15227 11

原创 SRS性能(CPU)、内存优化工具用法

SRS提供了一系列工具来定位性能瓶颈和内存泄漏,这些在./configure && make后的summary中是有给出来用法的,不过不是很方便,所以特地把用法写到这个文章中。GPERFGPROFVALGRIND

2016-12-07 11:51:38 6731

原创 Android实时直播,一千行java搞定不依赖jni,延迟0.8至3秒,强悍移动端来袭

在Android高版本中,特别是4.1引入了MediaCodec可以对摄像头的图像进行硬件编码,实现直播。一般Android推流到服务器,使用ffmpeg居多,也就是软编码,实际上使用Android的硬件编码会有更好的体验。看了下网上的文章也不少,但是都缺乏一个整体跑通的方案,特别是如何推送的服务器。本文把Android推直播流的过程梳理一遍。Android直播有几个大的环节:

2015-05-01 21:58:00 21866 32

原创 将h.264裸码流推送到RTMP服务器

h.264裸码流的格式,参考“”

2014-11-16 11:03:37 30404 34

原创 st(state-threads) coroutine和stack分析

st(state-threads)https://github.com/winlinvip/state-threads以及基于st的RTMP/HLS服务器:https://github.com/winlinvip/simple-rtmp-serverst是实现了coroutine的一套机制,即用户态线程,或者叫做协程。将epoll(async,nonblocking socket

2014-11-10 11:44:55 7416

原创 rtmp complex handshake,变更的握手,支持h264/aac

当服务器和客户端的握手是按照rtmp协议进行,是不支持h264/aac的,有数据,就是没有视频和声音。原因是adobe变更了握手的数据结构,标准rtmp协议的握手的包是随机的1536字节(S1S2C1C2),变更后的是需要进行摘要和加密。rtmp协议定义的为simple handshake,变更后加密握手可称为complex handshake。complex handshake C1

2013-10-24 23:48:05 14431 20

原创 RTMP服务器的延迟,多级边缘不影响延迟,gop为最大因素

编码器用FMLE,用手机秒表作为延迟计算。服务器结构如下:源站:NGINX-RTMP一级边缘:SmartServer二级边缘:SmartServerH264,baseline,gop=1秒,fps=20,bitrate=500kbps可见,延迟主要是在NGINX-RTMP,边缘服务器的延迟算法让延迟最低。改变编码参数:

2013-10-11 14:02:03 15166 3

原创 HTTP/HLS/RTMP超级负载测试工具

服务器负载测试工具(st-load):1. 模拟huge并发:2G内存就可以开300k连接。基于states-threads的协程。2. 支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端。支持HLS点播和直播。3. 支持HTTP负载测试,所有并发重复下载一个http文件。可将80Gbps带宽测试的72Gbps。4. 支持RTMP流测试,一个进程支持5k并发。使用nginx-rtmp的协议直接将chunk流解析为messgae。

2013-09-19 21:58:36 10681 9

翻译 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads

state-threads是c实现的coroutine网络库,对于IO占多数的程序,且有复杂的状态变换,有很大的简化作用。和python的eventlet类似。

2012-11-30 11:25:57 23143 22

原创 RTMP Handshake导致Flash不能播放H264流

Adobe在2009年公开了rtmp协议,wikipedia说是部分公开(an incomplete version)而且handshake也有变更。simple handshake是rtmp spec 1.0定义的握手方式。而complex handshake是后来变更的方式,Adobe没有公开。若研发rtmp server,将h264数据给FP播放时,必须为complex handshak

2012-07-04 12:03:40 7135 1

原创 SRS:连麦和多个视频号联播

先看最终的效果,可多人连麦后,推流到多个视频号和快手平台:整个流是这么流转的:首先,要开启视频号和直播功能,参考腾讯会议推流到视频号。然后,使用腾讯会议发起一个会议(连麦),并推流到视频号:接着,在视频号直播就可以看到预览画面,预览使用的是HTTPS-FLV:Note:可以打开Chrome的Console,查看HTTPS-FLV的地址。最后启动FFmpeg或SRS的Ingester拉流,然后推给其他号:ffmpeg -f flv -i 'https://xxx.flv' -c co

2021-09-12 19:58:00 132

原创 简书小女人,拜拜啦

连这篇文章本身都被简书封了,要是有一天简书成为BBA那样的公司,那岂不是只能写《万岁,简书?》本来打算从CSDN和微信公众号迁移到简书的,写了一段时间,被封了很多次文章,被封得一头雾水,吐槽下简书怎么像个冷冰冰的小女人一样,惹不起只好说:简书,拜拜啦。第一次被封,是我《Go技术指南》这篇文章在多个平台发,就简书要封我:CSDN: Go技术指南Github: Go技术指南公众号: Go技术指南简书:Go技术指南封号时也是冷冷的说请查看《为什么文章被锁定?》,文章里有很多条,得一条条猜测

2021-03-28 08:20:17 2028 9

原创 SRS官网如何发布新版本

SRS官网ossrs.net全部部署在K8S上,由以下服务组成:Web服务:http://ossrs.net 和 https://ossrs.net,包括SRS的安装包下载,版本信息,播放器页面,演示页面。稳定版SRS流媒体服务,演示比较稳定的服务,比如SRS v3.0-r3:r.ossrs.net开发版SRS流媒体服务,演示最新的功能,比如SRS v4.0.76:d.ossrs.net发布时,先获取官网代码,SRS官网是在srs.release这个仓库:git clone https://g

2021-03-02 21:25:45 485

原创 UDP服务器性能优化:Perf和GCP的对比

RTC服务器是UDP协议,存在以下几个难点:UDP包数目众多,包普遍比较小。比如一个视频关键帧,可能会被分成几十个UDP发送。比如每个Opus包,几十到一百多字节不等。不同协议需要复用端口(才能支持K8S云原生平台),每个包都需要找到对应的Session处理,客户端地址可能还会变更。高实时性,每个Session要即时的收发数据,不能做主动聚集包后收发,每个Session短时间就一两个包处理,没有太多可以批量处理的包。内核对UDP协议的性能优化,不如TCP高,优化方式也不如TCP多。需要加密和解密

2021-03-01 15:22:20 274 1

原创 Bootstrap笔记

链接默认div布局就是不断的堆叠。默认布局主要是上面的间隙太少,可以加增加间隙。标签和Badges可以用在显示状态,参考:这里警告框样式,可以用来显示错误消息提示。参考:这里进度条样式,显示进度,可以参考:这里导航条样式,一般的导航和菜单栏,可以参考:这里分页样式,可以参考:这里导航和TAB分栏,可以参考:这里下拉按钮组,可以参考:这里按钮组,可以参考:这里下拉菜单组,可以参考:这里折叠组,可以参考:这里信息展示方式,可以用dl/dt/dd也就是水平描述的方式。列表可以用ul/ol/

2021-02-15 22:17:08 46 1

原创 Mac使用技巧

手势基本手势设置:Settings => Trackpad轻点:Tap to click全屏App切换。Launch Pad。窗口拖动手势:Settings => Accessibility => Point Control => Trackpad Options => Enable DraggingTAB:最近使用的App的快速切换。快速锁屏:Settings => Mission ControlTerminal终端Tab,以及切换快捷键,Com

2021-02-15 21:53:16 74

原创 笔记:K8S备忘录

K8S的概念:Node(节点),节点机器,可以是物理机或虚拟机,比如ECS,运行了各种进程和docker等。Pod(容器组),应用的执行单元,创建和部署的单元;包含一个或多个容器,存储和网络资源,以及配置项。Controller(应用),管理Pods、复制和自愈,例如Node失败时自动迁移Pods到其他节点。Deployment(无状态),无状态Controller(应用)。Container(容器),一个Pod可以跑N>=1个Container,这些Container可以共享一些东西。

2021-02-01 16:34:31 101

原创 笔记:WASM WebAssembly

HelloWorld编写C++代码:helloworld.cpp#include <stdio.h>int main(int argc, char ** argv) { printf("Hello World!!!\n");}使用Docker将C++代码,编译成wasm,生成调用的js和html:docker run --rm -v $(pwd):/src emscripten/emsdk emcc helloworld.cpp -o helloworld.html可以

2021-02-01 13:53:56 154

原创 笔记:DOCKER相关

镜像管理看本机存在的imagesdocker images删除某个镜像,参数是ImageID:docker rmi -f 32c921902fdb容器管理启动容器:docker run -p 1935:1935 ossrs/srs:3查看运行中的容器:docker ps查看所有容器,包括已经停止的容器:docker ps -a可以指定当容器退出时,自动删除,参数--rm:docker run --rm -p 1935:1935 ossrs/srs:3删除已经停止的容器

2021-02-01 13:18:00 68

原创 笔记:一些UNIX命令小点心

Mac下看端口对应的pidlsof -nP比如:winlin$ lsof -nP|grep 9999server 24435 winlin 4u IPv6 0x51e37b3ca4d1227 0t0 UDP *:19999client 24572 winlin 5u IPv4 0x51e37b3d4513657 0t0 UDP 127.0.0.1:62689->127.0.0.1:19999参数:-P no port names

2021-02-01 12:34:51 70

原创 笔记:GIT配置和命令

推荐使用推荐配置成每个项目单独配置的方式:git config --local user.name "winlin"git config --local user.email "winlin@vip.126.com"git config --listGIT设置ALIAS别名git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgi

2021-02-01 12:27:55 44

原创 笔记:Envoy on macOS

Envoy笔记:macOS在macOS下,学习Envoy的笔记。macOS编译和调试Envoy下载Envoy源代码:git clone https://github.com/envoyproxy/envoy.git && cd envoy && echo "OK"使用brew安装依赖:brew install bazelisk &&brew install coreutils wget cmake libtool go bazel autom

2021-01-31 14:43:49 124

转载 Envoy threading model

Envoy threading model转载:https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

2021-01-06 10:50:45 214

原创 笔记:函数调用过程、参数和寄存器

这里写自定义目录标题函数调用过程、参数和寄存器GDB函数调用过程长参数函数调用函数调用过程、参数和寄存器之前实现macOS的coroutine汇编代码时,有分析过如何实现函数状态保存和恢复,这几天仔细看了下函数调用和传参,以及几个寄存器的使用。GDBGDB可以查看当前代码的汇编代码和寄存器,可以多次执行选择不同的layout:(gdb) layout pre如下图所示:按照汇编指令执行,可以用:(gdb) si函数调用过程代码参考frame0.cpp, 总结如下图所示:rb

2020-10-29 12:25:39 616

原创 Go开发关键技术指南

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

2020-01-10 19:33:48 1519

原创 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...

2019-12-29 19:22:25 54220 9

原创 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...

2019-12-29 19:22:14 19788 3

原创 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...

2019-12-29 19:21:49 22009

原创 笔记:C++中正确使用PRId64

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

2019-12-29 19:21:30 25041 1

原创 GOLANG探测HTTP连接断开

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

2017-11-22 12:25:04 5825 1

原创 GOLANG实现的HTTP转HTTPS的代理

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

2017-10-13 12:14:54 6302

原创 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 5930 2

翻译 Testivus On Test Coverage

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

2017-07-06 15:17:00 1811 1

原创 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 12849

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

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

2017-06-26 13:49:53 1542 1

原创 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 779

原创 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 2167

原创 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 12224

原创 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 11967

nginx-rtmp

nginx-rtmp

2014-01-01

android桌面小组件最简实例

android桌面小组件最简实例,最少代码。

2013-01-06

android桌面小组件

android桌面小组件官网实例 android桌面小组件

2013-01-06

f4v-moov

f4v-moov

2012-11-16

zeromq guide

zeromq guide zeromq指南

2012-12-23

gperftools-2.0.tar.gz

gperftools-2.0.tar.gz

2012-08-04

LDD 英文版

LDD 英文版

2013-12-05

Effective Go (中文版).pdf

Effective Go (中文版) .

2015-11-11

H.264-AVC-ISO_IEC_14496-15.pdf

H.264-AVC-ISO_IEC_14496-15.pdf

2013-11-24

amf0_spec_121207

adobe amf0_spec_121207 for amf0 format.

2012-10-29

video_file_format_spec_v10_1

video_file_format_spec_v10_1

2012-10-29

effective stl 中文版

effective stl 中文版

2013-03-22

新一代视频压缩编码标准H.264

新一代视频压缩编码标准H.264

2013-04-08

Node.js开发指南

Node.js开发指南, about the node.js

2012-11-05

Pattern.Oriented.Software.Architecture.Volume.2

Pattern.Oriented.Software.Architecture.Volume.2

2012-11-29

Effective.STL

Effective.STL Effective.STL

2013-03-22

OOAD booch 3rd edition

OOAD booch 3rd edition

2013-10-14

ISO_IEC_14496-1

ISO_IEC_14496-1

2012-11-18

ISO_IEC_14496-10

ISO_IEC_14496-10

2012-11-17

ISO_IEC_14496-3

ISO_IEC_14496-3

2012-11-18

ISO_IEC_14496-14_mp4-file-format

ISO_IEC_14496-14_mp4-file-format

2012-11-04

rtmp_specification_1.0

rtmp_specification_1.0

2012-10-29

学习Go语言

学习Go语言,中文版

2012-11-12

mp4 file format引用文档

mp4 file format引用文档 mp4 file format是 ISO_IEC_14496-14,引用了“ ISO_IEC_14496-12”文档。

2012-11-04

amf3_spec_121207

adobe amf3_spec_121207 format.

2012-10-29

原版 mp4 file format

mp4-file-format ISO/IEC 14496-14

2012-11-04

The.Cpp.Programming.Language.Special.Edition

The.Cpp.Programming.Language.Special.Edition

2012-10-29

mp4 file format

mp4 file format, ISO_IEC_14496-14

2012-11-04

nginx-rtmp build script

build nginx rtmp base one nginx1.5

2013-11-14

ISO_IEC_14496-15

ISO_IEC_14496-15

2012-11-16

win_lin的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除