FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
一、常见的四种流媒体传输协议对比
常见的流媒体传输协议主要有下面四类:RTSP协议、RTMP协议、SRT协议和RIST协议,关于这四种协议的详细说明参见之前的文章《利用RTMP协议构建电脑与手机的直播Demo》,这里不再赘述。
上面四种流媒体协议中,RTSP出现最早,在PC互联网时代,RTSP直播曾是主流的视频直播手段。下面就以RTSP协议为例,介绍如何通过EasyPusher-Android向流媒体服务器做RTSP直播推流。
二、电脑端通过OBS Studio进行RTSP直播推流
OBS Studio默认不支持RTSP协议,需要先安装OBS-RTSPServer插件,才能实现RTSP推流功能。有兴趣的朋友可以自行配置OBS Studio以便实现电脑端的RTSP直播推流。
三、手机端通过EasyPusher-Android进行RTSP直播推流
由于EasyPusher仅支持RTSP推流,而SRS不支持RTSP协议,因此服务端只能采用ZLMediaKit。首先启动云服务上的流媒体服务器ZLMediaKit,在云服务器上部署和启动ZLMediaKit比较麻烦,三言两语说不清楚。如果大家想弄明白如何在云服务器上操作ZLMediaKit,详细的操作步骤参见之前的文章《Linux环境安装ZLMediaKit实现视频推流》。
接着启动手机上的直播录制软件EasyPusher-Android,具体的操作步骤详见之前的文章《移动端的国产直播录制工具EasyPusher》。在调试过程中,发现EasyPusher-Android不能正常解析形如“rtsp://124.70.***.***/live/test”的推流链接,为此需要改造EasyPusher-Android的App代码,让它支持通用的RTSP推流地址。改造内容说明如下:
打开EasyPusher-Android工程的StreamActivity.java,把下面几行RTSP链接的解析代码:
改为下面的RTSP链接解析代码,目的是正常解析RTSP链接中的服务器IP、端口号和服务名称:
然后打开Config.java,把下面这行
改为下面这行:
保存代码后重新编译运行,将App安装到测试手机上,等待EasyPusher-Android启动后,点击屏幕左下角的“推流”按钮,让EasyPusher-Android对ZLMediaKit的rtsp地址“rtsp://124.70.***.***/live/test”推流,推流过程的EasyPusher-Android录制界面如下图所示。
观察华为云上的ZLMediaKit日志如下,可见EasyPusher-Android正在向后端的流媒体服务器推送直播流:
然后启动电脑上的流媒体播放器VLC media player,打开网络串流“rtsp://124.70.***.***/live/test”,此时VLC media player的视频播放界面如下图所示。
观察华为云上的ZLMediaKit日志如下,可见VLC media player正在从后端的流媒体服务器拉取直播流:
结合EasyPusher-Android直播录制画面和VLC media player的直播观看界面,可知通过EasyPusher-Android成功实现了RTSP协议的直播功能。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。