使用ffmpeg -re循环推流(循环读取视频文件)推送EasyDSS RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的方法

需求分析

众所周知,EasyDSS与EasyNVR最大的区别是,EasyDSS被动接受前端设备的推流,将推送过来的直播流进行直播转码、智能处理、视频分发,在通过CDN分发节点分发到终端播放SDK。而EasyNVR则是通过RTSP协议,主动拉取前端设备的直播流,同样分发出RTMP、HTTP-FLV、HLS、RTSP格式的直播流。EasyDSS前端采用的是一套调用简单、功能完善、高效稳定的EasyRTMP推流组件,支持RTMP推送断线重连、环形缓冲、智能丢帧、网络事件回调,支持Windows、Linux、ARM、Android、iOS平台,支持市面上绝大部分的RTMP流媒体服务器,能够完美应用于各种行业的直播需求,手机直播、桌面直播、摄像机直播、课堂直播等方面。
EasyDSS

在做EasyDSS开发时,重点测试推流效果,可以使用libEasyRTMP进行推流测试,可以使用OBS进行推流测试,也可以使用其他RTMP推流工具,效果都很好。但是,别忘了还有ffmpeg这个神器,ffmpeg同样可以获取各种视频流,并推送给EasyDSS RTMP流媒体服务器。

比如:拉取摄像机RTSP流,推送给EasyDSS,命令在此:

ffmpeg -re -i rtsp://username:password@ip:port/xxxxxxx -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test

当然,这个命令仅限于摄像机提供的H.264+AAC的码流

  • 若不是则将-vcodec copy改为-vcodec libx264-acodec copy改为-acodec aac
  • 若是,我们想用ffmpeg读取文件进行RTMP推送,可以选择OBS,毕竟ffmpeg比OBS更轻量,命令在此:
 ffmpeg -re -i test.h264 -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test

-vcodec和-acodec按需更改同拉取RTSP流,这样可以满足我们推送文件到EasyDSS的目的。

如果我想一直循环读取文件,做个长测呢?

解决方案

 ffmpeg -re  -stream_loop -1 -i test.h264 -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test

对比发现,以上命令加了一个-stream_loop -1,它是什么作用呢?

EasyDSS

https://ffmpeg.org/ffmpeg-all.html#Main-options

我们明白了此选项可以指定循环读取视频源的次数,-1为无限循环,以上问题就此完美解决。

关于EasyDSS

EasyDSS商用流媒体服务器提供一站式的转码、点播、直播、时移回放服务,极大地简化了开发和集成的工作,并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求:

  • 多屏播放:支持Flash、HTML5播放,兼容Windows、Android、iOS、Mac等操作系统。

  • 自由组合:EasyDSS软件产品之间无缝对接,也可将EasyDSS流媒体服务器软件与其他第三方平台对接,组合灵活自由。

  • 支持云架构:支持阿里云、腾讯云、华为云、青云、七牛云存储等各大云服务商,支持云架构,部署更灵活。

  • 与CDN无缝对接:EasyDSS软件产品支持与网宿、帝联、蓝汛等CDN无缝对接。

  • 二次开发简单:提供编程语言无关化的RESTful API接口,只要了解JS、HTML、JAVA、ASP.NET、PHP、ASP等开发语言中的任意一种,就能运用EasyDSS提供的RESTful API进行二次开发。

  • 简单易用:图形化操作,模块清晰,流程简单,极易上手。

EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!

适用场景

EasyDSS

在这里插入图片描述
EasyDSS

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一名AI语言模型,我无法进行实战操作。但我可以为您提供相关的思路和技术方案: 1. RTSPRTMP RTSP是实时流传输协议,而RTMP是实时消息传输协议。它们都是用于实时传输音视频流的协议,但是它们的传输方式不同。RTSP是基于TCP的协议,而RTMP是基于TCP或UDP的协议。 要将RTSP流转换为RTMP流,您需要使用一个转换器。其中一个常用的转换器是FFmpegFFmpeg是一个开源的多媒体框架,可以处理各种音视频格式,并且支持将RTSP流转换为RTMP流。 以下是使用FFmpegRTSP流转换为RTMP流的命令: ffmpeg -i rtsp://xxx.xxx.xxx.xxx:554/xxx -c copy -f flv rtmp://xxx.xxx.xxx.xxx/live/xxx 其中,rtsp://xxx.xxx.xxx.xxx:554/xxx是RTSP流的地址,rtmp://xxx.xxx.xxx.xxx/live/xxx是RTMP流的地址。 2. RTSPM3U8 M3U8是一种基于HTTP的流协议,它是一种多媒体播放列表,用于指定流媒体文件的播放顺序和位置。要将RTSP流转换为M3U8流,您需要使用一个转换器,如FFmpeg。 以下是使用FFmpegRTSP流转换为M3U8流的命令: ffmpeg -i rtsp://xxx.xxx.xxx.xxx:554/xxx -c:v libx264 -c:a aac -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/html/live/xxx.m3u8 其中,rtsp://xxx.xxx.xxx.xxx:554/xxx是RTSP流的地址,/var/www/html/live/xxx.m3u8M3U8流的地址。 3. 集成到Java应用程序中 要将上述转换器集成到Java应用程序中,您可以使用Java的ProcessBuilder类来执行命令行命令。以下是一个示例代码: String command = "ffmpeg -i rtsp://xxx.xxx.xxx.xxx:554/xxx -c copy -f flv rtmp://xxx.xxx.xxx.xxx/live/xxx"; ProcessBuilder processBuilder = new ProcessBuilder(command.split(" ")); processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); InputStream inputStream = process.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } process.waitFor(); 要将RTSP转换为M3U8,您可以使用类似的代码,只需更改命令即可。 以上是一个基本的思路和技术方案,具体实现还需要根据您的具体需求进行调整。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值