基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频

这篇具有很好参考价值的文章主要介绍了基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.获取RTSP地址

2.搭建流媒体服务器

2.1下载资源

下载nginx

 下载rtmp组件

 启动nginx

测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javacv的原理也是它)可忽略

 下载VLC(测试视频是否成功)

 2.2测试向流媒体服务器推流

3.转码

 4.查看监控数据状态:


最近基于摄像头搭建一个由摄像头采取RTSP流数据,并返回前端的需求。研究了一下怎么实现。

1.获取RTSP地址

摄像头厂商为:乔安智联的摄像头(其他摄像头也可以)。

通过ONVIF Device Manager软件在局域网内进行查找获取摄像头的RTSP流地址

ONVIF Device Managerhttps://sourceforge.net/projects/onvifdm/java 流媒体服务器,java,nginx

 使用方法网上很多(这里可能会出现问题,我由于电脑问题出现反序列失败,用别人的电脑已连接就成功,目前不知道原因)

2.搭建流媒体服务器

2.1下载资源

下载nginx

首先我们要知道一般nginx不能直接配置rtmp服务,在Windows系统上需要特殊nginx版本才能进行搭建 : nginx 1.7.11.3 Gryphon.ziphttp://nginx-win.ecsds.eu/download/

java 流媒体服务器,java,nginx

下载并解压,进入文件夹,打开cmd命令窗口。输入nginx -v。出现一下效果显示安装成功

java 流媒体服务器,java,nginx

 下载rtmp组件

由于后面需要检查监控直播状态,这里下载一个组件

nginx-rtmp-module-masterhttps://github.com/arut/nginx-rtmp-module/解压文件到nginx目录下

java 流媒体服务器,java,nginx

 启动nginx

在conf目录下,新建文件nginx.conf

java 流媒体服务器,java,nginx

 内容:


worker_processes  1;   #Nginx进程数,建议设置为等于CPU总核数
 
events {
    worker_connections  1024;  #工作模式与连接数上限
}
 
rtmp_auto_push on;
 
 
#RTMP服务
rtmp  {
    server  {
        listen 1935;
        chunk_size 4096;
        application live  {
            live on;	#开启直播
            record off;
        }
    }
}
 
 
#HTTP服务
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
 
    server {  #nginx启动页面
        listen       80;
        server_name  localhost;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
        location /live_hls{
		    types{
			    #m3u8 type设置
				application/vnd.apple.mpegurl m3u8;
				#ts分片文件设置
				video/mp2t ts;
			}
			#指向访问m3u8文件目录
			alias ./m3u8File;
			    add_header Cache-Control no-cache; #禁止缓存
		}
 
        location /control{
		    rtmp_control all;
		}
		
		location /stat{  #映射监控工具
		    rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl{
		    root ./nginx-rtmp-module-master;
		}
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

回到nginx目录,打开cmd命令行

输入start nginx命令启动nginx

在浏览器中输入localhost或是127.0.0.1检查启动是否成功(如下效果为成功)

java 流媒体服务器,java,nginx

 文章来源地址https://www.toymoban.com/news/detail-740192.html

测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javacv的原理也是它)可忽略

 ffmpeghttps://ffmpeg.org/

解压并配置全局变量

java 流媒体服务器,java,nginx

 测试ffmpeg:

在文件路径下打开终端

java 流媒体服务器,java,nginx

输入ffmpeg -i .\1.png i.jpg 

java 流媒体服务器,java,nginx

 当出现一下界面并且目录中出现转码的文件,表示操作成功

java 流媒体服务器,java,nginx

 下载VLC(测试视频是否成功)

VLChttps://www.videolan.org/vlc/

 2.2测试向流媒体服务器推流

在命令行中输入ffmpeg -i 上传的文件名 -f flv rtmp://127.0.0.1:1935/live

-i 表示推流的文件 -f表示指定推流的协议 后面的rtmp地址根据流媒体服务器中监听的端口和应用来获取 

这里以我的1.MP4为例

ffmpeg -i .\1.mp4 -f flv rtmp:127.0.0.1:1935/live (如果之前的所有和我一样,这里的也应该是一样的)

java 流媒体服务器,java,nginx

出现下面界面 表示正在推流中

java 流媒体服务器,java,nginx

打开VCL,在媒体选项中选择打开网络串流

java 流媒体服务器,java,nginx

地址输入推流的地址

java 流媒体服务器,java,nginx 出现视频表示推流,拉流成功

java 流媒体服务器,java,nginx

3.转码

由于目前大多数的浏览器无法直接解析RTSP流地址,所以这里选择用java作为后台转码并推流到流媒体服务器。

依赖:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.4.3</version>
</dependency>
<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>ffmpeg-platform</artifactId>
    <version>4.0.2-1.4.3</version>
</dependency>

java代码:

package com.example.demo.util;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

import lombok.SneakyThrows;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.*;

public class RecordVideoThread {
    public static void main(String[] args) {
        String RtspURL = "rtsp://192.168.17.88:554/live/ch00_0";// RTSP流地址(1中获取的)
        String RtmpUrl = "rtmp://127.0.0.1:1935/live/test";  //(RTMP地址)
        push(RtspURL , RtmpUrl );
    }

    public void push(String RtspURL, String RtmpUrl) {
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(RtspURL);
        FFmpegFrameRecorder recorder = null;
        try {
            //发起请求
            grabber.start();
            System.out.println("1111");
            Frame frame = grabber.grabFrame();
            if (frame != null) {
                // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
                recorder = new FFmpegFrameRecorder(RtmpUrl, 1080, 1440, 1);
                recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 直播流格式
                recorder.setFormat("flv");// 录制的视频格式
                recorder.setFrameRate(25);// 帧数
                //百度翻译的比特率,默认400000,但是我400000贼模糊,调成800000比较合适
                recorder.setVideoBitrate(800000);
                System.out.println("开始保存视频");
                recorder.start();
                while ((frame != null)) {
                    recorder.record(frame);// 推流
                    frame = grabber.grabFrame();// 获取下一帧
                }
                recorder.record(frame);
                // 停止录制
                recorder.stop();
                grabber.stop();
            }
        } catch (FrameGrabber.Exception e) {
            e.printStackTrace();
        } catch (FrameRecorder.Exception e) {
            e.printStackTrace();
        } finally {
            if (null != grabber) {
                try {
                    grabber.stop();
                } catch (FrameGrabber.Exception e) {
                    e.printStackTrace();
                }
            }
            if (recorder != null) {
                try {
                    recorder.stop();
                } catch (FrameRecorder.Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

启动项目,打开VCL,输入RTMP地址

java 流媒体服务器,java,nginx

 4.查看监控数据状态:

在浏览器输入localhost/stat

java 流媒体服务器,java,nginx

 

到了这里,关于基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

    先直接看图 这是ffmpeg向流媒体服务器推流时候的堆栈 引入C++ 11之后  堆栈会显得特别繁复冗余 看起来 也没有 以前没有C++11之前那样 简单明了   太复杂了 标记下  很多函数名字被我改了 因为原来的看起来 同名函数太多了 C++11 和lambada 匿名函数 让看堆栈 成了地狱模式 

    2023年04月20日
    浏览(57)
  • Windows上搭建Nginx-http-flv实现rtsp视频流推流到rtmp流媒体服务器并转换和前端拉取http-flv视频流

    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流: Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_霸道流氓气质的博客-CSDN博客 Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流: Vue中使用vue-vi

    2024年02月15日
    浏览(73)
  • 基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)

    前言:公司最近因为客户端视频文件过大导致视频加载时间很长,让我将视频播放做成流媒体点播的形式,于是查阅了几十篇相关文章以及文档,最终将功能实现。可能是存在版本差异,绝大部分文章介绍的教程并不能成功实施,尤其是点播功能,所以我把我工作中验证成功

    2024年02月02日
    浏览(64)
  • Windows基于Nginx搭建RTMP流媒体服务器(附带所有组件下载地址及验证方法)

    RTMP服务时常用于直播时提供拉流推流传输数据的一种服务。前段时间由于朋友想搭建一套直播时提供稳定数据传输的服务器,所以就研究了一下如何搭建及使用。 首先我们要知道一般nginx不能直接配置rtmp服务,在Windows系统上需要特殊nginx版本才能进行搭建 : nginx 1.7.11.3 Gryp

    2024年02月02日
    浏览(103)
  • Qt编写视频监控系统78-视频推流到流媒体服务器

    视频推流作为独立的模块,目前并没有集成到视频监控系统中,目前是可以搭配监控系统一起使用,一般是将添加好的摄像头通道视频流地址打开后,读取视频流重新推到流媒体服务器,然后第三方可以从流媒体服务器拉取视频流地址,相当于订阅分发,可以多路,按照需要

    2024年02月08日
    浏览(42)
  • RTSP向ZLM流媒体服务器的推流和拉流鉴权

    本篇博客的测试环境: Windows 10 + Qt 5.12.2 MSVC。 由于项目中使用了RTSP协议,为了防止别人知道我们的流地址随便就能播放观看我们的视频,所以就使用鉴权筛掉一些不合适的请求。 在鉴权之前呢,需要准备一下: ZLM流媒体服务器,是从ZLMediaKit中server中编译出来的,MediaServ

    2024年02月03日
    浏览(60)
  • Qt/C++编写视频监控系统78-视频推流到流媒体服务器

    视频推流作为独立的模块,目前并没有集成到视频监控系统中,目前是可以搭配监控系统一起使用,一般是将添加好的摄像头通道视频流地址打开后,读取视频流重新推到流媒体服务器,然后第三方可以从流媒体服务器拉取视频流地址,相当于订阅分发,可以多路,按照需要

    2024年02月11日
    浏览(45)
  • 流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写

        目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下: (本图来源:https://www.ngui.cc/zz/1781086.html?action=onClick)     SRS(Simple Real-time Server)是一个开源的流媒体服务器,它支持RTMP、HLS、HTTP-FLV等多种流媒体协议

    2024年02月11日
    浏览(48)
  • FFmpeg流媒体处理的收流与推流

    1. 简介 流媒体是使用了流式传输的多媒体应用技术。如下是维基百科关于流媒体概念的定义: 流媒体 (streaming media) 是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不

    2024年02月11日
    浏览(44)
  • Qt/C++音视频开发51-推流到各种流媒体服务程序

    最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中经过大量的对比测试,个人比较建议使用mediamtx和ZLMediaKit,因为这两者支持的格式众多,不仅同时支持rtsp/rtmp推流,

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包