直播和WebRTC
文章平均质量分 71
直播和WebRTC会议将成为全球数字经济的基础,开源是重要的部分,而SRS将成为视频的基础服务器,就像web时代的nginx一样。
winlinvip
直播和WebRTC程序员,开源服务器SRS
展开
-
SRS云服务器:起步、购买和入门
SRS云服务器,是开箱即用的音视频方案,提供升级和监控运维能力,同时针对不同音视频的应用场景,开箱即用。使用起来非常简单,不熟悉服务器和命令行也可以使用,也可以作为开发者的参考实现。Video Tutorial我们准备了视频教程,非常短只有几分钟时间,可以解决你的很多疑问,请观看下面B站的视频:SRS云服务器:https://www.bilibili.com/video/BV1844y1L7dL/特别提醒几点:• 记得防火墙开特定端口哈,开防火墙也很容易。• 关于云服务器有问题,可以扫视频中的原创 2022-05-20 15:52:28 · 1179 阅读 · 0 评论 -
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 · 966 阅读 · 0 评论 -
OBS直播如何连麦和多人连麦
OBS如何支持直播多人连麦和BGM?比如SRS 4.0的多人连麦、多平台直播、多场景切换的在线发布会方案如何实现的?废话不多说,直接上干货。我录制了3分钟的视频教程,使用起来很简单,3分钟就讲清楚了: OBS-001-OBS连麦和多人连麦 Timmerse需要使用特殊版本,可以扫视频中的二维码加群获取。一图胜千言,就是实现下图的能力,是用的OBS推的直播:Why为什么是OB原创 2021-11-30 10:15:02 · 7485 阅读 · 0 评论 -
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 · 1994 阅读 · 0 评论 -
笔记:函数调用过程、参数和寄存器
这里写自定义目录标题函数调用过程、参数和寄存器GDB函数调用过程长参数函数调用函数调用过程、参数和寄存器之前实现macOS的coroutine汇编代码时,有分析过如何实现函数状态保存和恢复,这几天仔细看了下函数调用和传参,以及几个寄存器的使用。GDBGDB可以查看当前代码的汇编代码和寄存器,可以多次执行选择不同的layout:(gdb) layout pre如下图所示:按照汇编指令执行,可以用:(gdb) si函数调用过程代码参考frame0.cpp, 总结如下图所示:rb原创 2020-10-29 12:25:39 · 2590 阅读 · 0 评论 -
当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 · 4637 阅读 · 1 评论 -
Go开发关键技术指南
Go开发关键技术指南原图链接地址:https://www.processon.com/view/link/5df22829e4b010171a411e7d#map感谢阿里巴巴云原生微信公众号转载了这篇文章,给了很重要的改进建议,从Markdown转微信公众号也做了大量工作,配图和排版让阅读变成一种享受。如果你更习惯微信阅读,可以读下面四章:Go 开发关键技术指南 | 为什么你要选择 G...原创 2020-01-10 19:33:48 · 5262 阅读 · 1 评论 -
异步Socket(非阻塞模式)的应用
异步Socket(非阻塞模式)的应用若Socket是同步模式(即阻塞模式):1. send(1024)需要等1024个字节发完了才会返回(或者socket被关闭了)。这使得server在和低速的client通信时被阻塞,所以高性能server要使用非阻塞方式。2. recv(1024)不会等1024个字节,但必须要有数据才行,否则会被阻塞。所以阻塞的recv通常需要判断是否有数原创 2012-08-08 13:05:41 · 2936 阅读 · 0 评论 -
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 · 7557 阅读 · 1 评论 -
Linux服务器多进程模型
Linux多进程服务器真的很给力,赞一个!Linux多进程一般是master负责侦听,worker接受和伺服client。一个使用了以下技术的多进程模型:1. sigset:安全信号,信号屏蔽和接受。2. epoll:异步io模型。master进程使用信号模型,侦听用户信号和程序信号,并和worker交流。它的主循环是sigsuspend。worker进程使用事件模型,使用原创 2012-07-19 19:16:36 · 4744 阅读 · 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 · 16103 阅读 · 11 评论 -
Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之三:mp4 to rtmp packets
上篇文章讲了解析mp4的帧序列,这篇文章讲读取帧的时间戳和类型,以及打包成rtmp packet。RTMP/FLV结构mp4的mdat的video/audio数据,需要加上5个字节的头,打上时间戳后才能以rtmp包发送出去,rtmp包和flv的格式是一样的。所以flv的包可以直接读取tag的data后发送,而mp4的数据需要在前面加5个字节的头后才能作为data发送出去。下图是fl原创 2012-11-18 09:01:03 · 3557 阅读 · 0 评论 -
Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之二:moov分析
MOOV的stbl(SampleTable)包含了关于Sample(Audio/Video)如何组织的。每个audio/video track box都有个stbl,描述了chunk和sample的对应关系。stbl的结构stbl的结构如下:Mp4把mdat(存放媒体数据的box)分为Chunk,每个Chunk包含Sample,Sample即为视频的帧或音频数据。m原创 2012-11-16 18:50:34 · 3464 阅读 · 0 评论 -
Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之一,文件结构
F4v是MP4的子集,由adobe定义。网上资料大多关于mp4的box,对于整体结构,特别是chunk-sample(video/audio)的关系说得很模糊。分几篇文章来说明mp4文件结构。第一篇关于mp4的整体结构,mp4的box结构请参考其他文章。mp4典型的结构如下图,由三个box组成:Adobe的sample文件,sample1_1500kbps.f4v的结构原创 2012-11-16 17:55:11 · 3971 阅读 · 0 评论 -
NAT穿透,UDP打洞程序
在看NAT穿透和UDP打洞原理,网上都是讲原理,没有程序,我把程序写出来。server.py,辅助打洞的服务器。peer.server.py,被打洞的节点。peer.client.py,主动打洞的节点。基本原理是:1. peer.client向peer.server发个包,把自己的洞打好,这样peer.server可以给peer.client发包。这个包会被NAT拒绝掉,所原创 2013-05-07 18:22:23 · 4598 阅读 · 0 评论 -
找了2周的一个bug,鬼使神差的重现了这个bug
从2013-04-28找到2013-5-27,一共10天。提交了16次修正代码。有时候是Segmentation fault.,有时候是Illegal instruction。死在了一个不可能死的地方(当然所有地方都不可能死,在程序员看来)。最开始怀疑是用了空指针,所以加了很多assert(p != NULL),发现不管用。然后用tcmalloc找,找到了一个,但是还是原创 2013-05-07 09:06:27 · 1789 阅读 · 0 评论 -
flash p2p(RTMFP)协议
adobe在2012-12-13公开了flash p2p的协议,最新的更新是2013-4-15.http://tools.ietf.org/html/draft-thornburgh-adobe-rtmfp-06在http://www.rtfmp.net上有协议的链接。翻译第一段:1. 简介 Adobe的RTMFP是为在IP网络中的点对点数据传输服务设计的。RTM原创 2013-05-04 10:17:34 · 3429 阅读 · 0 评论 -
linux下检测和定位内存泄漏位置的方法
gtest:http://code.google.com/p/googletest/,可以下载最新的代码。下载后,可以参考gtest-1.6.0\make\Makefile写自己的Makefile。程序内存的信息(/proc/self/smaps):VMSIZE: 15316 KBRSS: 2560 KB total 1152原创 2012-06-21 19:26:53 · 6631 阅读 · 0 评论 -
析构函数,必须是virtual的,否则会内存泄漏
AMF0String => AMF0Base假设析构函数不是virtual:AMF0String* s = new AMF0String("abc"); delete s; //没有问题,可以调用AMF0String的析构函数释放heap内存。AMF0String* s = new AMF0String("abc"); delete (AMF0Base*)s; // 内存泄漏,调用原创 2012-06-15 19:18:48 · 2188 阅读 · 0 评论 -
拷贝构造函数--内存被重复释放的隐形人
c++中拷贝构造函数的概念一直没有仔细看,原因是没有在这个上面栽过跟头,最近终于有幸花了一个下午找一个内存重复释放的错误,发现是拷贝构造函数。看一下可以运行的没有问题的例子,是如何变成内存杀手的:#include #include using namespace std;class MyString{private: int length; char* va原创 2012-06-14 17:27:38 · 3215 阅读 · 2 评论 -
高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads
state-threads是c实现的coroutine网络库,对于IO占多数的程序,且有复杂的状态变换,有很大的简化作用。和python的eventlet类似。翻译 2012-11-30 11:25:57 · 27331 阅读 · 23 评论 -
Kafka协议翻译
Kafka协议Kafka是linkedin开源的一个数据传输框架,主要的定位是解决一个数据源多个消费者的应用场景,支持和Storm、Spark、Flume对接,提供负载均衡和容错的集群,用来传输各种数据日志。Links关于Kafka的介绍,请参考kafka doc。关于Kafaka的协议,请参考kafka protocol。关于Kafka的设计理念,参考kafka log。本文主要是记录kafka协翻译 2015-09-17 16:42:55 · 2083 阅读 · 0 评论 -
函数式组合编程,完胜类体系编程
考虑打印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 · 944 阅读 · 1 评论 -
HLS AAC音频爆音噗噗滋滋的原因
HLS AAC Muxer Issue很久以前,我就看到NGINX-RTMP,在将RTMP转换成HLS时,重新计算了AAC的时间戳,比如44100的采样率,RTMP的Audio包大约是23毫秒一个,NGINX重新计算90000*1024/44100.0=2089.7959,如果直接将RTMP转成TS时间戳应该是23*90=2070可见有19个时间戳单位的误差,因此会导致噗噗的杂音。如果是8000或1原创 2017-04-16 21:40:50 · 5949 阅读 · 0 评论 -
超级rtmp服务器和屌丝wowza
wowza2/3根本就无法达到10Gbps,尽管在80Gbps带宽中也达不到(http可是能到72Gbps)。nginx同源架构的rtmp服务器,也能到10Gbps。原创 2013-09-23 14:57:14 · 9690 阅读 · 2 评论 -
Android实时直播,一千行java搞定不依赖jni,延迟0.8至3秒,强悍移动端来袭
在Android高版本中,特别是4.1引入了MediaCodec可以对摄像头的图像进行硬件编码,实现直播。一般Android推流到服务器,使用ffmpeg居多,也就是软编码,实际上使用Android的硬件编码会有更好的体验。看了下网上的文章也不少,但是都缺乏一个整体跑通的方案,特别是如何推送的服务器。本文把Android推直播流的过程梳理一遍。Android直播有几个大的环节:原创 2015-05-01 21:58:00 · 22569 阅读 · 32 评论 -
SRS产品规划
很久不写长文章,终于卯足劲写完一个,看看我写软文能力如何,哈哈。https://github.com/ossrs/srs/wiki/v1_CN_ProductSRS产品规划SRS虽然是开源项目,但是窃以为,任何软件产品还是要有规划,没有定位,就不知道不做什么,不知道不做什么就不知道做什么,不知道做什么就做不好。SRS目标SRS的原创 2014-03-02 21:02:46 · 13148 阅读 · 23 评论 -
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 · 11784 阅读 · 9 评论 -
单进程支持高并发
学习nginx,很好奇如何做到单个进程支持几万并发(当时用3万client连接过去,都能保持连接)。在linux服务器上:不使用select,因为fd_set限制为1024,只能有1024个连接,而且慢。使用epoll,man epoll可以看到资料。尽管使用了epoll,但是超过1024连接时,还是会有too many open files的错误,每个连接都是一个文件句柄,所原创 2012-05-14 21:21:06 · 2703 阅读 · 0 评论 -
NGINX-RTMP复杂度分析
很好奇nginx如何处理异步请求,我看nginx-rtmp在处理异步时状态也还行,所以调试下看看。首先,下载和解压nginx: tar xf nginx-1.5.0.tar.gz && tar xf nginx-rtmp-module-1.0.4.tar.gz cd nginx-1.5.0 && ./configure --add-module=/home/winlin原创 2013-09-27 20:30:06 · 6785 阅读 · 2 评论 -
RTMP服务器的延迟,多级边缘不影响延迟,gop为最大因素
编码器用FMLE,用手机秒表作为延迟计算。服务器结构如下:源站:NGINX-RTMP一级边缘:SmartServer二级边缘:SmartServerH264,baseline,gop=1秒,fps=20,bitrate=500kbps可见,延迟主要是在NGINX-RTMP,边缘服务器的延迟算法让延迟最低。改变编码参数:原创 2013-10-11 14:02:03 · 18492 阅读 · 3 评论 -
RTMFP服务器的研发过程
SRS大家见到时,已经准备release 1.0了,其实从0到1.0的过程才是最重要的。最近在弄RTMFP服务器,虽然我们公司不开源,但是记录我们做这个服务器的过程,应该是没有问题的。简介RTMFP有开源的服务器,譬如cumulus,我们也是用的cumulus。cumulus一个进程大约能支持5000并发,我们给新蓝网做直播前两期有近20万,第三期少一点也有4万原创 2014-08-23 16:10:28 · 6686 阅读 · 11 评论 -
一组RTMFP服务器性能对比
最近研发了公司的rtmfp服务器,参考http://blog.csdn.net/win_lin/article/details/38779151,原因是cumulus性能还是不满意。对性能进行对比测试,原创 2014-08-24 07:11:01 · 3527 阅读 · 1 评论 -
可伸缩的高性能高并发RTMFP集群架构
集群分为RTMFP FARM和SSL Cluster FARM,负责uu原创 2014-08-24 21:34:07 · 2228 阅读 · 2 评论 -
st(state-threads) coroutine和setjmp/longjmp的关系
st(state-threads) https://github.com/winlinvip/state-threads以及基于st的RTMP/HLS服务器:原创 2014-11-09 11:47:01 · 5186 阅读 · 0 评论 -
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 · 8018 阅读 · 0 评论 -
st(state-threads) coroutine调度
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-11 12:16:37 · 5074 阅读 · 0 评论 -
将h.264裸码流推送到RTMP服务器
h.264裸码流的格式,参考“”原创 2014-11-16 11:03:37 · 33131 阅读 · 35 评论 -
SRS微信号和QQ群
联系方式:https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Contact原创 2015-03-14 23:25:55 · 3246 阅读 · 1 评论 -
SRS进入20K时代,不仅仅是并发
SRS进入20K时代,不仅仅是并发2015-05-29 winlin SRS单进程SRS支持7.5k并发,如果单机需要单机100K并发,可以使用多进程SRS,即SRS-DOLPHIN。目前测试SRS-DOLPHIN的测试数据是20K并发,理论上多进程的扩展性可以到达任意并发,只要你的CPU和网卡还有交换机够。而SRS-DOLPHIN不仅仅是高并发,还可以做容错,提高稳定原创 2015-05-29 11:29:13 · 8763 阅读 · 3 评论