最近项目需要把监控摄像机的RTSP流在放在浏览器上播放,但由于目前浏览器并不支持RTSP,需要转码才行。之前试过nginx作为流媒体服务器,这次尝试使用ffmpeg将码流推送srs流媒体服务器,实现浏览器端播放,特此记录一下。
SRS 是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT
源码地址:
githup:
https://github.com/ossrs/srs
gitee:
https://gitee.com/ossrs/srs
1.在Liunx上编译安装SRS流媒体服务器
注意: 由于第一次安装的时候是先下载到window上,然后拖进liunx里的,
编译执行./configure 会出现这个 ”
build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录
“ 错误,
这个是windows和linux换行符不同导致的,然后重新在liunx直接下载了一遍就可以了。
//先把分支4.0release clone下来
git clone -b 4.0release https://gitee.com/ossrs/srs.git
//然后编译
cd srs/trunk
./configure && make
使用配置文件启动(这样启动需要在目录trunk中才行)
#使用配置文件srs.conf启动
./objs/srs -c conf/srs.conf
# 查看SRS的状态
./etc/init.d/srs status
#停止SRS
./etc/init.d/srs stop
#重启SRS
./etc/init.d/srs restart
# 或者看SRS的日志
tail -n 30 -f ./objs/srs.log
打开浏览器可以访问(我这个服务器的ip是192.168.13.170),有个控制台页面
http://192.168.13.170:8080/
2.Java使用ffmpeg推流
首先需要一个ffmpeg程序才行,没有的可以去ffmpeg官网下载
package com.ffmpeg.service;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.util.IdUtil;
import lombok.SneakyThrows;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
public class FFmpegUtil {
/** ffmpeg 命令详解
* ffmpeg [[options][`-i’ input_file]] {[options] output_file}
* options:
* -i: url 输入文件网址
* -vcodec: 设置视频编解码器 -codec:v -c:v
* (强制使用codec编解码方式,如-vcodec xvid 使用xvid压缩 如果用copy表示原始编解码数据必须被拷贝)
* -acodec: 设置音频编解码器 -codec:a -c:a
* -f: fmt 强制输入或输出文件格式
@SneakyThrows
public static void srs(){
String osName = System.getProperties().getProperty("os.name");
System.out.println(osName);
ClassPathResource classPathResource = new ClassPathResource("ffmpeg"+ File.separator+"win64"+ File.separator);
String basePath = classPathResource.getAbsolutePath();
String myStream = IdUtil.simpleUUID();
String command = basePath + "ffmpeg -re " +
"-rtsp_transport tcp " +
"-i rtsp://admin:123456@192.168.13.199:554 " +
"-c:v copy -c:a copy " +
"-f flv rtmp://192.168.13.170/live/"+myStream;
System.out.println("rtmp://192.168.13.170/live/"+myStream);
Process process = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while((line = br.readLine()) != null) {
System.out.println("视频推流信息[" + line + "]");
public static void main(String[] args) {
srs();
可以进入浏览器控制台查看对应的视频了
要在web浏览器上播放,可以进入预览页面查看保存对应的js代码
附上SRS的Wiki
前言:最近项目需要把监控摄像机的RTSP流在放在浏览器上播放,但由于目前浏览器并不支持RTSP,需要转码才行。之前试过nginx作为流媒体服务器,这次尝试使用ffmpeg将码流推送srs流媒体服务器,实现浏览器端播放,特此记录一下。SRS 是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT源码地址:githup:https://github.com/ossrs/srsgitee:https://gitee.com/ossrs/srs1....
要搭建SRS(Simple Real-time Server)推流服务器,可以按照以下步骤进行操作:
1. 安装依赖环境:SRS推荐在Linux服务器上运行,首先确保你的服务器上已经安装了以下依赖环境:GCC编译器、FFmpeg、Git。
2. 克隆SRS代码库:在终端中执行以下命令,克隆SRS的代码库到本地:
git clone https://github.com/ossrs/srs.git
3. 编译和安装SRS:进入克隆下来的srs目录,执行以下命令编译和安装SRS:
cd srs/trunk
./configure && make
sudo make install
4. 配置SRS:SRS的配置文件是`conf/srs.conf`,你可以根据自己的需求进行相应的配置。配置文件的详细说明可以参考SRS官方文档。
5. 启动SRS:执行以下命令启动SRS服务:
sudo service srs start
6. 验证SRS是否正常工作:可以使用FFmpeg进行推流测试,例如执行以下命令将视频文件推流到SRS服务器:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your_srs_server/live/stream_key
其中`your_srs_server`是你的SRS服务器IP地址或域名,`stream_key`是你设置的流名称。
以上是一个简单的SRS推流服务器的搭建过程,具体的配置和使用可以根据你的需求进行调整。请注意,为了确保服务器安全性和性能,请参考SRS官方文档和最佳实践进行配置和运维。
wangshukaicode:
Java 搭建srs流媒体服务器,并使用ffmpeg推流
没有毛病:
Java 搭建srs流媒体服务器,并使用ffmpeg推流
业界小菜鸟:
Java 搭建srs流媒体服务器,并使用ffmpeg推流