目录

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/

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

2.搭建流媒体服务器

2.1下载资源

下载nginx

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

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

下载rtmp组件

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

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

启动nginx

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

内容:


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代码调试问题,所以这里先下载一个转码推流的工具,其中javacv的原理也是它)可忽略

ffmpeghttps://ffmpeg.org/

解压并配置全局变量

测试ffmpeg:

在文件路径下打开终端

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

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

下载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 (如果之前的所有和我一样,这里的也应该是一样的)

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

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

地址输入推流的地址

 出现视频表示推流,拉流成功

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地址

4.查看监控数据状态:

在浏览器输入localhost/stat

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

  1. 树莓派直播推流---nginx流媒体服务器搭建

    参考: https://blog.csdn.net/li_wen01/article/details/70639397 https://www.jianshu.com/p/76c1be068170 1 ...

  2. 流媒体服务器 客户端播放器方案推荐

    https://github.com/jacke121/stream-rtsp 使用说明: 貌似把rtsp转为webrtc,但是没有把图片编码为webrtc: Example config.json ...

  3. 最简单的基于Flash的流媒体示例 网页播放器(HTTP,RTMP,HLS)

    ===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(Acti ...

  4. FFmpeg入门详解之100:搭建Nginx流媒体服务器

    这里小编给大家推荐一款流媒体服务器Nginx,可以实现RTMP和HLS等.搭建完成后,可以使用FFmpeg推流,实现直播功能. 注意:操作环境是Ubuntu18.04, 总共分为几个步骤: 1.安装N ...

  5. p2p 文件服务器集群,基于云计算的P2P流媒体服务器集群部署算法.doc

    基于云计算的P2P流媒体服务器集群部署算法.doc 基于云计算的P2P流媒体服务器集群部署算法 摘 要: 针对云计算数据中心网络(DCN)环境下,P2P流媒体服务器集群部署引起的较高带宽占用问题,提出 ...

  6. Android音视频学习系列(十) — 基于FFmpeg + OpenSL ES实现音频万能播放器

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  7. rtmp服务器与播放器的交互

    转载于:http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html RTMP(Real Time Messaging Protoc ...

  8. SRS流媒体服务器——Edge集群搭建

    SRS流媒体服务器--Edge集群搭建 目录 edge原理 dege配置 1. edge原理 SRS的Edge主要解决⼏条流有⼤量播放请求的场景,⽐如⼀个流有上万⼈观看. SRS的Edge能对接所有的 ...

  9. SRS流媒体服务器——Forward集群搭建和源码分析

    SRS流媒体服务器--Forward集群搭建和源码分析 目录 Forward集群原理 RTMP流转发(Forward)部署实例 Forward集群源码分析 1. Forward集群原理 Forward ...

最新文章

  1. 在html中引入CSS的方法
  2. Ubuntu中的颜色选择器实用程序(彩色移液器)[关闭]
  3. [SDOI2008]Sandy的卡片
  4. 简单一“录”,轻松完成金融业务审核!
  5. redis源码剖析(七)—— Redis 数据结构dict.c
  6. humanize时间库使用及汉化
  7. linux逻辑文件块,linux逻辑卷组创建以及修改
  8. 尝试引用非结构体数组的字段_剖析PHP底层数组是如何实现的
  9. 20200331:每日温度(leetcode739)
  10. mysql事务操作代码_Mysql中事务的使用【mysql】
  11. samba和nfs的自动挂载
  12. qxdm无法安装问题闪一下_关于QXDM的安装,解决Win7下QIK报错的问题
  13. 证件照素材大合集(全网最全版本)
  14. 织梦首页header实现会员的登录及会员状态显示
  15. 解决2021版本idea定位图标消失
  16. 带张光盘去装机(转)
  17. Arun Jaitley:要健康最好让银行保持增长势头
  18. 深入理解Java虚拟机——运行时栈帧结构(局部变量表)
  19. 计算机与linux基础
  20. 转自科学网:《评论:“副教授,我缺少的是什么?”》

热门文章

  1. 服务器虚拟机的c盘怎么加,xp虚拟机c盘怎么扩容
  2. EF CodeFirst 必须要解决的问题
  3. Linux电源管理(2)_Generic PM之基本概念和软件架构(蜗窝科技,www.wowotech.net)
  4. editplus5激活码 文件下载 汉化包
  5. 透明Png黑白图片上色(重新着色、改变成指定颜色)
  6. 名帖205 蔡襄 行书《蔡襄自书诗》
  7. storm throw 口袋妖怪_~~~~~~SOS!SOS!SSSSSSSOS!!!~~~那位大侠能给贴一个全招式的英文对...
  8. python 列表拆分_python列表拆分
  9. unity-光照烘焙GI简单应用
  10. 面试阿里被问的哑口无言,原来我……