目前主流的直播软件(抖音、快手、斗鱼、虎牙等)均采用了 rtmp 协议推流
这篇文章探讨的是,如何编写一个rtmp服务器代理并替换其中视频流,实现无人直播或者录播
rtmp 协议是什么?怎么实现无人直播
rtmp协议是adobr公司专为音视频流定制的传输协议。目前很多公司都喜欢采用他进行传输音视频 (根据研究,微信视频号采用的是 rtp 协议,而不是rtmp)。
相对应的还有一个 rtsp 协议,这两者协议均是用来做音视频传输的,rtsp 是有组织维护的,而 rtmp 属于adobe公司私有协议,并未完全开放。
如何替换无人直播的视频流?
上面了解了rtmp 是什么,接下来就思考如何替换视频流数据了。
举一个例子 :我们常用的http 协议是用来访问网站的。当一个网站无法访问时,例如谷歌,我们需要开启一个网络代理,使用代理这个中间商,由中间服务器提供数据,从而实现访问
那同样的代理是否也可以用到 rtmp 协议呢,答案是肯定的 。我们只要自己定制一个 rtmp 代理服务器,在这个代理服务器中解析验证参数、地址、用户等信息即可
服务器编写
rtmp服务器如何编写??从头开始太难了。为了照顾其跨平台特性。这里推荐一个 github 项目:https://github.com/LiminWang/simple-rtmp-server
我们无需从头开始编写,只要 clone
项目后,进行定制即可
如何替换推流?
通过上面的步骤 。
假设rtmp 代理服务器已经编写完成,并且获取了关键数据,那么现在只要将本地录播文件,或者待转播的链接,通过某种方式,进行视频流替换并转播即可。
这里电脑端推荐采用 obs,当然,如果只有一台手机 ,那显然不行,这里可以开发一款安卓软件,内置 ffmpeg 程序。但选择视频后,即可使用 ffmpeg 命令进行视频流的推送功能
整体的数据流程大概就是:
抖音app
=> 我们的rtmp服务器
=> 抖音服务器
通过我们的服务器是经过定制的,在数据经过时,修改其内容
安卓程序
上面探讨了技术思路,那么在安卓上,如果需要开启一个代理,采用的就是vpn技术。此技术理论上 iphone 也可以,但奈何本人技术薄弱,只能实现Android 端
Android 采用 VPNServer
开启一个服务
如果需要做这样一款程序,首先需要采用vpn ,拦截抖音数据包,将其转发到我们编写的服务器。然后服务器读取到关键数据后,采用ffmpeg 推流本地或转播视频。整体技术难度较高
成品
通过github定制服务器+自行编写 VPNServer,成品apk链接如下:无人直播推流助手
其优势在于无需root或者刷机,在之前的工具中。硬改和刷机是非常流行的