最近项目需要把监控摄像机的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. 配置SRSSRS的配置文件是`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: 运行报错Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisTemplate' defined in class path resource [com/flydiy/example/ext/config/RedisConfiguration.class]: Unsatisfied dependency expressed through method 'redisTemplate' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} Java 搭建srs流媒体服务器,并使用ffmpeg推流 没有毛病: 我的为啥输出 视频推流信息[Unrecognized option 'rtsp_transport'],而且视频流列表是空的 Java 搭建srs流媒体服务器,并使用ffmpeg推流 业界小菜鸟: srs流地址是怎么生成的? Java 搭建srs流媒体服务器,并使用ffmpeg推流 你把ffmpeg.exe放在resources下,打成jar包之后就无法获取路径