SRS源码——Listener】的更多相关文章

1. 整理了一下Listener相关的UML类图:…
SRS源码中的Thread是一层套一层,最终的Thread类是在 srs_app_thread.cpp 的 SrsThread 类 这里我们暂且先放下协程的概念,把它当线程来看,其逻辑如下: 1. 在start() 方法中创建线程: int SrsThread::start() { int ret = ERROR_SUCCESS; if(tid) { srs_info("thread %s already running.", _name); return ret; } :), ))…
在SRS的Ingest功能中,会调用本地FFmpeg进行拉流转码, 调用的核心代码在srs_app_ffmpeg.cpp 的 SrsFFMPEG::start() 中: // memory leak in child process, it's ok. ]; ; i < (int)params.size(); i++) { std::string& p = params[i]; charpv_params[i] = (char*)p.data(); } // EOF: NULL charpv…
srs_app_server.cpp  int SrsServer::listen() { int ret = ERROR_SUCCESS; if ((ret = listen_rtmp()) != ERROR_SUCCESS) { return ret; } if ((ret = listen_http_api()) != ERROR_SUCCESS) { return ret; } if ((ret = listen_http_stream()) != ERROR_SUCCESS) { re…
一.背景 搭建流媒体服务的方式一般会采用nginx+rtmp和srs服务两种,前者是nginx加上插件所用,而后者是专门为了为了流媒体而生,在这一节中我们将从头搭建srs流媒体服务 二. 运行环境 为了此服务后期部署到生产环境中,笔者采用docker方式来搭建此服务,docker目前属于基础性软件了,在本文中就不再细述如何安装,大家可以去www.docker.com下载安装包安装即可:一般正式的生产环境中我们通常使用Linux系统作为服务器,所以我本文中同样使用了Linux系统,不过我选择了我比…
为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做SRS的流媒体服务器,比较活跃,而且据说这个流媒体服务器的性能和功能都强大不少,但遗憾的是没有HLS加密功能.问原作者没有回复,所以还是自己动手,丰衣足食吧,花了几个晚上的时间自己参考nginx-rtmp实现了一下.代码放到了github上. 功能介绍 几个新添加的参数配置项 hls_keys on…
  今天在做项目时突然发现我该如何向listener中注入service对象,因为监听器无法使用注解注入. 此时有人会想用以下代码通过xml的方式注入: ApplicationContext context=new ClassPathXmlApplication(*.xml); productService =(ProductService)context.getBean("productService"); 这样的话会导致一个问题,那就是Tomcat会两次加载spring的配置文件.…
下载代码 地址:https://github.com/ossrs/srs-gb28181 https://github.com/ossrs/srs-gb28181.git 注意:使用的是含有gb28181的GitHub仓库地址.若是使用其他的仓库地址,比如:https://github.com/ossrs/srs.git,这种在编译过程中不确定configure命令是否含有./configure --with-gb28181参数,没有的话则不能使用这个仓库的源码 我这边是直接在线下载的一个zip…
容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就是从这里开始,找到后,直接遍历,调用invokeListener()方法,注意这个虽然有invoke,但不是反射,只是普通方法而已. 到这里开始调用doInvokeListener()方法,注意前面两个invoke方法都没有做什么实质性的工作,可以认为仅仅只是传递参数,这里才开始动真格的了: 因为这…
一.前言 大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样,通过链式调用,避免层层嵌套,如下: //jquery版本大于1.8 function runAsync(){ var def = $.Deferred(); setTimeout(function(){ console.log('I am done'); def.resolve('whatever'…