- 博客(291)
- 资源 (30)
- 收藏
- 关注
原创 当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 4664 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 16121 11
原创 SRS性能(CPU)、内存优化工具用法
SRS提供了一系列工具来定位性能瓶颈和内存泄漏,这些在./configure && make后的summary中是有给出来用法的,不过不是很方便,所以特地把用法写到这个文章中。GPERFGPROFVALGRIND
2016-12-07 11:51:38 8582
原创 Android实时直播,一千行java搞定不依赖jni,延迟0.8至3秒,强悍移动端来袭
在Android高版本中,特别是4.1引入了MediaCodec可以对摄像头的图像进行硬件编码,实现直播。一般Android推流到服务器,使用ffmpeg居多,也就是软编码,实际上使用Android的硬件编码会有更好的体验。看了下网上的文章也不少,但是都缺乏一个整体跑通的方案,特别是如何推送的服务器。本文把Android推直播流的过程梳理一遍。Android直播有几个大的环节:
2015-05-01 21:58:00 22594 32
原创 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 8038
原创 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 18861 20
原创 RTMP服务器的延迟,多级边缘不影响延迟,gop为最大因素
编码器用FMLE,用手机秒表作为延迟计算。服务器结构如下:源站:NGINX-RTMP一级边缘:SmartServer二级边缘:SmartServerH264,baseline,gop=1秒,fps=20,bitrate=500kbps可见,延迟主要是在NGINX-RTMP,边缘服务器的延迟算法让延迟最低。改变编码参数:
2013-10-11 14:02:03 18584 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 11837 9
翻译 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads
state-threads是c实现的coroutine网络库,对于IO占多数的程序,且有复杂的状态变换,有很大的简化作用。和python的eventlet类似。
2012-11-30 11:25:57 27384 23
原创 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 7581 1
原创 SRS云服务器:起步、购买和入门
SRS云服务器,是开箱即用的音视频方案,提供升级和监控运维能力,同时针对不同音视频的应用场景,开箱即用。使用起来非常简单,不熟悉服务器和命令行也可以使用,也可以作为开发者的参考实现。Video Tutorial我们准备了视频教程,非常短只有几分钟时间,可以解决你的很多疑问,请观看下面B站的视频:SRS云服务器:https://www.bilibili.com/video/BV1844y1L7dL/特别提醒几点:• 记得防火墙开特定端口哈,开防火墙也很容易。• 关于云服务器有问题,可以扫视频中的
2022-05-20 15:52:28 1201
原创 SRS视频教程
SRS有丰富的视频教程,包括SRS的使用和开发定制,FAQ即常见问题,还有课程链接。Note: 不过视频并不能完全替代文档,文档是最全面的、最系统化的,希望大家不要忽略文档,可以看 FAQ: SRS有哪些文档和资料SRS Cloud如果你是刚刚了解SRS和音视频的朋友,推荐直接用SRS云服务器(云SRS),先建立音视频直观的感受,然后再详细了解。云SRS是开源的音视频方案,它组合了SRS、FFmpeg、WebRTC,使用Redis、Nodejs和React来实现必要的业务功能,可以直接用在生产环
2022-05-13 19:23:33 999
原创 如何开发宝塔插件
宝塔管理服务器比较方便,管理网站和数据库,安装各种插件,比较灵活。如果能用宝塔安装云SRS,那可以在很多云和虚拟机都可能安装了。说干就干,先去下载资料,宝塔插件的官方手册和官方论坛,还有官方Demo,可以直接下载下来后在你的宝塔中安装。我跟着操作了一遍,发现还是有些地方没有说清楚,而官方Demo比较复杂,写得比较隐晦,就重新写了个教程。Note: 目前插件开发,需要企业认证,认证通过后,才能开发第三方应用插件。Develop Mode记得一定要打开开发者模式,否则修改代码不生效:Note
2022-04-26 16:15:51 1979
原创 PhpStorm+Apache+Xdebug3开发调试环境搭建
我搭建过C/C++/Go/Nodejs/Python等开发调试环境,PHP的是最难搭建的,因为PHP的调试工具是PhpStorm,而服务器是Apache,调试模块是Xdebug(2和3还不同),加上PHP有各种调试姿势,比如还有ZEND调试,眼花缭乱,更加不容易搞好。
2022-04-14 07:47:15 1118
原创 OBS直播如何连麦和多人连麦
OBS如何支持直播多人连麦和BGM?比如SRS 4.0的多人连麦、多平台直播、多场景切换的在线发布会方案如何实现的?废话不多说,直接上干货。我录制了3分钟的视频教程,使用起来很简单,3分钟就讲清楚了: OBS-001-OBS连麦和多人连麦 Timmerse需要使用特殊版本,可以扫视频中的二维码加群获取。一图胜千言,就是实现下图的能力,是用的OBS推的直播:Why为什么是OB
2021-11-30 10:15:02 7730
原创 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 2031
原创 简书小女人,拜拜啦
连这篇文章本身都被简书封了,要是有一天简书成为BBA那样的公司,那岂不是只能写《万岁,简书?》本来打算从CSDN和微信公众号迁移到简书的,写了一段时间,被封了很多次文章,被封得一头雾水,吐槽下简书怎么像个冷冰冰的小女人一样,惹不起只好说:简书,拜拜啦。第一次被封,是我《Go技术指南》这篇文章在多个平台发,就简书要封我:CSDN: Go技术指南Github: Go技术指南公众号: Go技术指南简书:Go技术指南封号时也是冷冷的说请查看《为什么文章被锁定?》,文章里有很多条,得一条条猜测
2021-03-28 08:20:17 2374 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 1498
原创 UDP服务器性能优化:Perf和GCP的对比
RTC服务器是UDP协议,存在以下几个难点:UDP包数目众多,包普遍比较小。比如一个视频关键帧,可能会被分成几十个UDP发送。比如每个Opus包,几十到一百多字节不等。不同协议需要复用端口(才能支持K8S云原生平台),每个包都需要找到对应的Session处理,客户端地址可能还会变更。高实时性,每个Session要即时的收发数据,不能做主动聚集包后收发,每个Session短时间就一两个包处理,没有太多可以批量处理的包。内核对UDP协议的性能优化,不如TCP高,优化方式也不如TCP多。需要加密和解密
2021-03-01 15:22:20 1183 1
原创 Bootstrap笔记
链接默认div布局就是不断的堆叠。默认布局主要是上面的间隙太少,可以加增加间隙。标签和Badges可以用在显示状态,参考:这里警告框样式,可以用来显示错误消息提示。参考:这里进度条样式,显示进度,可以参考:这里导航条样式,一般的导航和菜单栏,可以参考:这里分页样式,可以参考:这里导航和TAB分栏,可以参考:这里下拉按钮组,可以参考:这里按钮组,可以参考:这里下拉菜单组,可以参考:这里折叠组,可以参考:这里信息展示方式,可以用dl/dt/dd也就是水平描述的方式。列表可以用ul/ol/
2021-02-15 22:17:08 1114 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 257
原创 笔记:K8S备忘录
K8S的概念:Node(节点),节点机器,可以是物理机或虚拟机,比如ECS,运行了各种进程和docker等。Pod(容器组),应用的执行单元,创建和部署的单元;包含一个或多个容器,存储和网络资源,以及配置项。Controller(应用),管理Pods、复制和自愈,例如Node失败时自动迁移Pods到其他节点。Deployment(无状态),无状态Controller(应用)。Container(容器),一个Pod可以跑N>=1个Container,这些Container可以共享一些东西。
2021-02-01 16:34:31 463
原创 笔记: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 750
原创 笔记: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 579
原创 笔记:一些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 326
原创 笔记: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 215
原创 笔记: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 846
转载 Envoy threading model
Envoy threading model转载:https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310
2021-01-06 10:50:45 690
原创 笔记:函数调用过程、参数和寄存器
这里写自定义目录标题函数调用过程、参数和寄存器GDB函数调用过程长参数函数调用函数调用过程、参数和寄存器之前实现macOS的coroutine汇编代码时,有分析过如何实现函数状态保存和恢复,这几天仔细看了下函数调用和传参,以及几个寄存器的使用。GDBGDB可以查看当前代码的汇编代码和寄存器,可以多次执行选择不同的layout:(gdb) layout pre如下图所示:按照汇编指令执行,可以用:(gdb) si函数调用过程代码参考frame0.cpp, 总结如下图所示:rb
2020-10-29 12:25:39 2615
原创 Go开发关键技术指南
Go开发关键技术指南原图链接地址:https://www.processon.com/view/link/5df22829e4b010171a411e7d#map感谢阿里巴巴云原生微信公众号转载了这篇文章,给了很重要的改进建议,从Markdown转微信公众号也做了大量工作,配图和排版让阅读变成一种享受。如果你更习惯微信阅读,可以读下面四章:Go 开发关键技术指南 | 为什么你要选择 G...
2020-01-10 19:33:48 5314 1
原创 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 56205 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 21363 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 23186
原创 笔记: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 30566 1
原创 GOLANG探测HTTP连接断开
考虑基于HTTP的RPC,或者HTTP服务器主动通知客户端的机制,就是HTTP Long-Polling,意思就是客户端发起一个长连接,服务器阻塞忍住不响应直到:超时,比如5秒后,我们给客户端响应一个keepalive,意思是现在还没有啥事,请继续polling。拿到结果,这个可能是任何时候,比如300毫秒、1100毫秒、2300毫秒拿到一个事件,响应给客户端,实现了有事件异步通知。这样客户端
2017-11-22 12:25:04 7941 1
原创 GOLANG实现的HTTP转HTTPS的代理
有时候需要将后端的HTTP服务,转成HTTPS,可以用一个代理。 Reamark: 如果是GOLANG的后端服务,可以直接用库go-oryx-lib/https。这个代理支持自签名的证书,也支持letsencrypt的证书。 Remark: Letsencrypt只支持少量域名的情况,比如自己的网站,它会有请求次数限制,另外CA是letsencrypt的,商业用户不适合用。我们有个HTT
2017-10-13 12:14:54 7719
原创 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 6495 2
Pattern.Oriented.Software.Architecture.Volume.2
2012-11-29
mp4 file format引用文档
2012-11-04
The.Cpp.Programming.Language.Special.Edition
2012-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人