一种直播软件支持同时多路推流的方法与流程

文档序号:15878729发布日期:2018-11-09 17:29阅读:7012来源:国知局
一种直播软件支持同时多路推流的方法与流程

本发明涉及软件开发技术领域,具体为一种直播软件支持同时多路推流的方法。

背景技术

“openbroadcastersoftware”是一个免费且开源的用于视频录制以及直播推流的软件。它可以让用户在windows,mac以及linux上简单且快速的开始推流,方便的分享用户桌面操作,游戏过程,网页浏览过程等。“openbroadcastersoftware”支持多种视频编解码格式,如h264(x264)等,可以实时的将直播用户指定的多种显示来源数据合成在一起;支持多种音频编解码格式,例如aac和opus等。它默认支持采用rtmp协议推流,可以无缝的推流到各种支持rtmp协议的流媒体服务器中,如youtube,斗鱼等。

“openbroadcastersoftware”目前只支持采用rtmp协议进行推流,但市面上有很多的推流协议,包括一些为了特定目的自己定义的流媒体协议。“openbroadcastersoftware”是一个采用插件式结构的软件,所有的功能都能通过插件的形式进行扩充,只要满足规范要求即可,因此为了让“openbroadcastersoftware”可以支持其它的推流协议就必须自己重新定义一个符合“openbroadcastersoftware”输出插件规范的插件,目前已经有一些知名的流媒体直播服务平台在“openbroadcastersoftware”上开发出了支持自己专有的推流协议的插件。

在现实应用中,有时会出现这样的应用场景,例如游戏主播a希望使用“openbroadcastersoftware”在直播的时候可以将自己的直播内容同时推送到两个不同的游戏直播平台live_1和live_2上,平台live_1采用rtmp协议,平台live_2采用自定义的rtp协议。这样的应用场景就需要“openbroadcastersoftware”能支持同时进行多路推流的能力,并且支持不同协议的多路流。虽然“openbroadcastersoftware”是一个开源的软件,但是目前在此基础上衍生出来的直播软件均只能支持一路直播。



技术实现要素:

针对上述问题,本发明的目的在于提供一种能够增加功能,不仅可以支持同时多路推流到不同的流媒体平台,并且支持不同的协议同时推流,还可以有效的降低软件对内存和cpu资源的耗费的直播软件支持同时多路推流的方法。技术方案如下:

一种直播软件支持同时多路推流的方法,括如下步骤:

步骤1:下载“openbroadcastersoftware”最新代码,按照向导安装配置依赖库;

步骤2:若要设计自定义的流输出协议,则在plugins/obs-outputs/目录下新建一个源码文件myrtp.c,并在其中按照“openbroadcastersoftware”输出推流协议插件接口规范obs_output_info中定义的要求实现各种回调函数;若利用现有的第三方直播平台实现的协议,则将该协议实现进行二次封装,并按照“openbroadcastersoftware”输出推流协议插件接口规范obs_output_info中定义的要求进行二次封装;

步骤3:修改obsbasicsettings和obsbasic类,在obsbasicsettings类中为增加的串流配置直播流服务器地址、秘钥、协议类型等信息,增加的新的流信息保存在obsbasic中新增加的obsservice类型的变量中;

步骤4:修改window-basic-main-outputs.hpp文件,根据步骤3配置的多路推流方案,给basicoutputhandler类增加新的obsoutput,增加新的obsoutput的个数与配置推流的路数相对应;

步骤5:修改window-basic-main-outputs.cpp文件中的simpleoutput类,根据步骤4中增加的obsoutput来分别为每一个输出流配置相应的音频编码器;

步骤6:修改simpleoutput类的构造函数,在里面按照类似rtmp协议输出的方式为步骤5增加的新的obsoutput进行初始化,同时添加对音频编码器rtp_auidoencoder的初始化;将新添加的输出streamoutput_rtp挂载到推流软件的用户交互界面产生的开始、停止事件回调函数指针队列中;

步骤7:修改startstreaming函数,按照类似rtmp输出启动的方式添加对streamoutput_rtp的启动,设置streamoutput_rtp的音频编码器为前面创建的rtp_auidoencoder;

步骤8:修改simpleoutput::setupoutputs函数,按照rtmp输出流的方式为streamoutput_rtp增加音频编码数据,来源为rtp_auidoencoder编码器编码;

步骤9:按照上述方法修改其它控制流状态开关过程涉及到的代码,并连接ui界面中的控制逻辑。

进一步的,所述步骤3中在修改增加接收多路推流配置信息的obsservice类型的变量时根据需要进行修改,若只增加一路推流,则额外增加一个obsservice类型的变量,若额外增加多路推流,则用一个容器保存。

更进一步的,所述步骤5中若目前主流的流媒体音频编解码方案为aac则直接复用默认的rtmp推流协议的编码器,否则增加一个新的obsencoder音频编码器。

更进一步的,所述步骤7和步骤8中为新增加输出流设置视频编码器时,直接复用rtmp的h264streaming。

本发明的有益效果是:本发明为流行的直播软件“openbroadcastersoftware”提供了多路同时推流的能力,解决了使用“openbroadcastersoftware”只能单一推rtmp协议流而不能同时输出自定义推流协议的问题。可以让一个主播用户同时将自己的实时直播内容推送到不同的直播平台,并且支持不同协议的多路流。本发明提供的改造方法需要修改的源代码不多,增加的多路推流对现有资源最大限度的实现了复用,例如复用最耗费计算资源的视频编解码器,实现了以较小改造代价让“openbroadcastersoftware”支持多路推流的能力,和原始版本的软件相比一样的运行流畅。需要进行多路视频直播的应用场景开发者按照介绍的步骤,不需要大的改动即可实现,能节约开发成本并易于后续升级与维护。

附图说明

图1为本发明的流程架构图。

图2是应用实现本发明时的流程图。

具体实施方式

下面结合附图和具体实施例对本发明做进一步详细说明。如图1所示,“openbroadcastersoftware”的内核主要分为两个部分:

(1)“obs”负责用户交互界面的管理,包括生成用户界面,对用户操作进行响应等,同时还负责管理交互界面用户操作生成的配置文件;“openbroadcastersoftware”是一个采用插件式构架的软件,因此大多数的额外功能都依赖于独立的插件来运行,因此“obs”还需要根据用户配置加载相应的插件,并对插件的生命周期进行管理,例如加载、销毁、停止等等;

(2)“libobs”主要负责音视频编解码器的管理、输出流obsoutput的管理;本发明的重要步骤就是增加修改obsoutput的管理方式,obsoutput负责封装管理一路输出流,包括将编解码好的音视频送到输出流,进行相应的状态控制等。真正负责推送流媒体到视频直播平台的是由支持不同流媒体直播协议的插件完成的,从图1可以看出这里同时推两路流媒体到不同的直播平台,其中一个流媒体直播协议是rtmp,一个是自定义的rtp直播协议。

本实施例的直播软件支持同时多路推流的方法通过修改“openbroadcastersoftware”的源代码,添加支持多路直播的相关代码,修改部分界面用于让用户配置多路直播的相关信息,最后在直播时复用同一个视频编码器及其编码后的码流再整合不同直播协议要求的音频编码数据完成多路直播,这种方法可以有效的降低软件对内存和cpu资源的耗费,并完整的支持多路直播。

为了更好的实现本发明,结合图2所示详细解释实现本发明的步骤如下:

步骤1:从开源网址https://github.com/obsproject/obs-studio下载“openbroadcastersoftware”最新代码,按照向导安装配置依赖库。

步骤2:如果需要设计自己的流输出协议,则必须在plugins/obs-outputs/目录下新建一个源码文件,并在其中按照“openbroadcastersoftware”输出推流协议插件接口规范obs_output_info中定义的要求实现各种回调函数。假设用户要为"openbroadcastersoftware"增加一个新的自定义的直播输出推流rtp协议插件,源文件为myrtp.c;那么在这个文件中必须实现满足obs输出推流协议插件接口规范obs_output_info中定义的各种回调函数,例如void*(*create)(obs_data_t*settings,obs_output_t*output)这个函数指针就是用来指向插件用于创建输出实例的函数。

如果要利用现有的各个第三方直播平台实现的协议,则需要将它们的协议实现进行二次封装,并按照“openbroadcastersoftware”输出推流协议插件接口规范obs_output_info中定义的要求进行二次封装。

步骤3:修改obsbasicsettings类和对应的qt界面文件obsbasicsettings.ui,在界面文件中增加用户配置多路流的信息,例如配置推流平台的地址、秘钥、协议类型等,最后再修改obsbasicsettings实现用户交互动作。

步骤4:修改obsbasic类,在其中修改增加接收多路推流配置信息的obsservice类型的变量,这里可以根据自己的需要进行修改,如果只是增加一路推流,则额外增加一个obsservice类型的变量即可;例如rtp_service。

步骤5:修改window-basic-main-outputs.hpp文件,根据步骤4的多路推流方案,给basicoutputhandler类增加新的obsoutput,步骤4中配置了多少路推流就增加多少个新的obsoutput。如果只增加一路推流,则额外增加一个即可,例如rtp_streamoutput。

步骤6:修改window-basic-main-outputs.cpp文件中的simpleoutput类,根据步骤5中增加的obsoutput来分别为每一个输出流配置相应的音频编码器,注意目前主流的流媒体音频编解码方案为aac或者是opus,如果是aac则直接复用默认的rtmp推流协议的编码器,否则增加相应的编码器即可;例如rtp_auidoencoder。

步骤7:修改simpleoutput类的构造函数,在里面按照类似默认rtmp协议输出的方式为步骤5增加的新的obsoutput进行初始化,将初始化后的对象添加到软件前台界面的开始、停止等的事件回调函数队列中,这样才能正常获得用户的操作事件通知;对步骤6添加的音频编码器进行初始化;如要将新添加的输出streamoutput_rtp挂载到推流软件的用户交互界面产生的开始、停止等的事件回调函数指针队列中,这样才能正常获得用户的操作事件通知然后进行对应的响应。

步骤8:修改simpleoutput类的startstreaming函数,按照类似默认rtmp流输出启动的方式添加对步骤5增加的新的obsoutput启动,同时设置新的obsoutput的音频编码器为步骤6中分别对应创建的音频编码器;需要注意的是这里不要额外的创建新的视频编码器,直接复用rtmp的h264streaming即可,这样可以有效的降低计算性能的耗费,视频编码器非常耗费计算资源;

步骤9:修改simpleoutput::setupoutputs函数,按照类似默认rtmp输出流的方式为步骤5增加的新的obsoutput设置音频编码数据来源为步骤6中分别对应创建的音频编码器,注意这里要设置新的obsoutput的视频编码数据来源要复用默认rtmp流的h264streaming;

步骤10:按照类似思路修改其它一些控制流状态开关过程等涉及到的代码,并连接ui界面中的一些控制逻辑。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1