首页 > 其他分享 >FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播

FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播

时间:2024-09-25 12:46:37浏览次数:9  
标签:__ FFmpeg RTSP 直播 EasyPusher Android 推流

FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播

  合集 - FFmpeg开发实战(55)     ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMP Streamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT Streamer实现完整的SRT直播流程,接下来介绍如何使用EasyPusher-Android实现完整的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链接的解析代码:

String ip = Config.getIp(this);
String port = Config.getPort(this);
String id = Config.getId(this);

改为下面的RTSP链接解析代码,目的是正常解析RTSP链接中的服务器IP、端口号和服务名称:

String regex = "^rtsps?://([^/:]+)(?::(\\d+))*/([^/]+)/?([^*]*)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(url);
boolean matches = matcher.matches();
Log.d(TAG, "matches = " + matches);
String ip = matcher.group(1);
String port = matcher.group(2)!=null?matcher.group(1):"554";
String id = matcher.group(3) + "/" + matcher.group(4);

然后打开Config.java,把下面这行

private static final String DEFAULT_SERVER_URL = "rtsp://cloud.easydarwin.org:554/" + String.valueOf((int) (Math.random() * 1000000 + 100000));

改为下面这行:

private static final String DEFAULT_SERVER_URL = "rtsp://124.70.***.***/live/test"; // 注意换成自己的RTSP服务器IP

保存代码后重新编译运行,将App安装到测试手机上,等待EasyPusher-Android启动后,点击屏幕左下角的“推流”按钮,让EasyPusher-Android对ZLMediaKit的rtsp地址“rtsp://124.70.***.***/live/test”推流,推流过程的EasyPusher-Android录制界面如下图所示。

观察华为云上的ZLMediaKit日志如下,可见EasyPusher-Android正在向后端的流媒体服务器推送直播流:

[MediaServer] [119311-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtsp://__defaultVhost__/live/test
[MediaServer] [119311-event poller 0] MediaSink.cpp:161 emitAllTrackReady | All track ready use 270ms
[MediaServer] [119311-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:fmp4://__defaultVhost__/live/test
[MediaServer] [119311-event poller 0] MultiMediaSourceMuxer.cpp:551 onAllTrackReady | stream: rtsp://124.70.221.25:554/live/test , codec info: mpeg4-generic[8000/1/16] H264[720/1280/0] 
[MediaServer] [119311-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtmp://__defaultVhost__/live/test
[MediaServer] [119311-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:ts://__defaultVhost__/live/test
[MediaServer] [119311-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/live/test

然后启动电脑上的流媒体播放器VLC media player,打开网络串流“rtsp://124.70.***.***/live/test”,此时VLC media player的视频播放界面如下图所示。

观察华为云上的ZLMediaKit日志如下,可见VLC media player正在从后端的流媒体服务器拉取直播流:

[MediaServer] [119311-event poller 0] Rtsp.cpp:413 getPortPair | got port from pool:34512-34513
[MediaServer] [119311-event poller 0] Rtsp.cpp:413 getPortPair | got port from pool:33900-33901
[MediaServer] [119311-event poller 0] RtspSession.cpp:819 handleReq_Play | 10-20(121.204.108.60:2247) rtsp seekTo(ms):0

结合EasyPusher-Android直播录制画面和VLC media player的直播观看界面,可知通过EasyPusher-Android成功实现了RTSP协议的直播功能。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

标签:__,FFmpeg,RTSP,直播,EasyPusher,Android,推流
From: https://www.cnblogs.com/sexintercourse/p/18431108

相关文章

  • FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播1111
    FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播 合集-FFmpeg开发实战(55)  ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMPStreamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT......
  • ffmpeg如何实现视频推流?
    FFmpeg是一个强大的多媒体框架,用于处理视频和音频数据。它包括了libavcodec(用于解码和编码)、libavformat(用于格式转换)、libavutil(提供一些辅助工具和函数)、libavfilter(用于音视频过滤)等多个库。以下这些都是FFmpeg的特性FFmpeg支持大量的音视频编解码器,如H.264、H.265、VP9、MPEG-2......
  • 用ffmpeg合并截取拆分音频
    转自:http://blog.sina.com.cn/s/blog_50e610900102vkab.html1多个mp3文件合并成一个mp3文件一种方法是连接到一起ffmpeg64.exe-i"concat:123.mp3|124.mp3"-acodeccopyoutput.mp3解释:-i代表输入参数          contact:123.mp3|124.mp3代表着需要连接到一起的......
  • Android平台Unity3D下如何同时播放多路RTMP|RTSP流?
    技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上,我们在前几年发布Unity下直播播放模块的时候,就已经支持了Android多实例播放RTMP|RTSP,随着大家对这块的技术诉求和性能要求越......
  • 拥抱变化之FFmpeg 7.0与VVC
    IntroductiontoFFmpegFFmpeg isasolutiontorecord,convertandstreamaudioandvideo.Itisaveryfastvideoandaudioconverteranditcanalsoacquirefromaliveaudio/videosource.Designedtobeintuitive,thecommand-lineinterface(ffmpeg)tri......
  • 从规范到实现解读Windows平台如何播放RTSP流
    RTSP播放器应用场景RTSP播放器在视频监控、远程视频会议、网络电视、实时流媒体传输、协同操控相关的智能设备、教育培训以及企业内部通讯与协作等多个领域都有着广泛的应用场景。1.视频监控RTSP直播播放器在视频监控系统中扮演着重要角色。通过RTSP协议,播放器可以实时接收来自监......
  • 知其然知其所以然-以视频播放器为例解读RTSP协议的作用
    技术背景好多开发者在用大牛直播SDK的RTSP播放器模块的时候,希望知其然知其所以然,以便跟甲方沟通的时候,底气更足。本文从RTSPsession建立开始,详细解读RTSP播放器的实现原理。RTSP播放器应用场景RTSP播放器具有以下一些主要的使用场景:一、监控领域视频监控系统:在企业、学校、公共场......
  • Android轻量级RTSP服务使用场景分析和设计探讨
    技术背景好多开发者,对我们Android平台轻量级RTSP服务模块有些陌生,不知道这个模块具体适用于怎样的场景,有什么优缺点,实际上,我们的Android平台轻量级RTSP服务模块更适用于内网环境下、对并发要求不高的场景,实现低成本、低延迟的音视频实时传输。本文就上述问题,做个技术探讨,先说......
  • FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
    ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMPStreamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRTStreamer实现完整的SRT直播流程,接下来介绍如何使用EasyPusher-Android实现完整的RTSP直播流程。一、......
  • FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
    ​EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows、Linux、Android、iOS等操作系统。EasyPusher采用RTSP推流协议,其中安卓版EasyPusher的Github托管地址为https://github.com/EasyDarwin/EasyPusher-Android。不过EasyPusher有好几年没更新了,尤其安卓版的EasyP......