网站正在建设中 手机版深圳网站定制建设

web/2025/10/8 23:05:43/文章来源:
网站正在建设中 手机版,深圳网站定制建设,批量做单页网站,百度搜索广告服务支撑#xff1a;FFmpeg srs(流媒体服务器) 整个流程是 FFmpeg 收流转码 推 rtmp 到流媒体服务 流媒体服务再 分发流到公网 搭建流媒体服务: 1. SRS (Simple Realtime Server) | SRS #xff08;本例子使用的是SrS 安装使用docker #xff09; 2.GitHub - ZLMedi…服务支撑FFmpeg  srs(流媒体服务器)   整个流程是 FFmpeg 收流转码 推 rtmp 到流媒体服务 流媒体服务再 分发流到公网 搭建流媒体服务: 1.  SRS (Simple Realtime Server) | SRS 本例子使用的是SrS 安装使用docker 2.GitHub - ZLMediaKit/ZLMediaKit: WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C11 3.nginx实现 自己百度 4. 其他的还有收费的那种  2.服务器安装FFmpeg  yum 可以安装 java 服务实现调用ffmpeg 1.ProcessManager  用于执行指令以及 关闭这个流等操作 package io.renren.common.live;import cn.hutool.core.thread.ThreadUtil; import org.springframework.beans.factory.DisposableBean; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map;/*** author chenkang* date 2023年8月3日09:43:21*/ public class ProcessManager implements DisposableBean {private MapString, WeakReferenceProcess processMapnew HashMap();/*** 启动一个进程* param processName 进程名称key* param command 执行指令*/public void startProcess(String processName, String command) {ThreadUtil.execAsync(() - {try {ProcessBuilder processBuilder new ProcessBuilder(command.split( ));Process process processBuilder.start();processMap.put(processName, new WeakReference(process));BufferedReader reader new BufferedReader(new InputStreamReader(process.getErrorStream()));String line;while ((line reader.readLine()) ! null) {System.out.println(processName : line);}int exitCode process.waitFor();System.out.println(processName : Process execution completed with exit code: exitCode);} catch (IOException | InterruptedException e) {e.printStackTrace();}});}/*** 销毁* param processName key*/public void terminateProcess(String processName) {WeakReferenceProcess weakRef processMap.get(processName);if (weakRef ! null) {Process process weakRef.get();if (process ! null) {process.destroy();}processMap.remove(processName);}}private void terminateAllProcesses() {for (WeakReferenceProcess weakRef : processMap.values()) {Process process weakRef.get();if (process ! null) {process.destroy();}}}Overridepublic void destroy() throws Exception {this.terminateAllProcesses();this.processMap.clear();} } 对接的是大华的摄像头 /**      * 开始推流      * 备注现在客户的设备是NVR NVR 下大概有54个摄像头   公网映射rtsp 554 端口 根据channel 开区分是那个摄像头      * 必须条件1.服务端要安装好 ffmpeg    2.要搭建一个流媒体服务器 这个使用的是 srs      * 流程用户端想要查看某个摄像头-查询到设备信息获取到摄像头的channel 这个是提前维护好的      * -拿到channel走如下方法 调用FFmpeg  执行转码推流指令客户的摄像头是h265-》rtsp流会被转码 重新设定分辨率 码率转h264 并把转码流推向流媒体服务器 srs      * -客户想看的时候就 拉取 流媒体服务端的rtmp流 完成播放      *      * 其他      * 1.用户再播放的时候 要先确定这个摄像头有没有别的人在观看  观看了就不在执行了 1.可以调用srs 接口查询流是不是存在 这个比较稳妥 2.或者是 processManager 判断是否在推了      * 2.有时候用户强制关闭客户端 无法感知用户不在观看了这面还要 定时的去调用srs 接口查询闲置的流及时的给关闭 同时也要 把服务的process 给主动关闭不然一直推      * 这个要先去关闭process再调用接口关闭srs服务的流      *      *      * http://127.0.0.1:1985/api/v1/streams 查询服务端所有流      *{      *     code: 0,      *     server: vid-f1gt8j3,      *     streams: [      *         {      *             id: vid-143p019,      *             //streamName      *             name: 3,      *             vhost: vid-5847096,      *             app: live,      *             live_ms: 1691039306435,      *             //客户端数量 这个要注意 默认就有1 个客户端是推流      *             clients: 1,      *             frames: 0,      *             send_bytes: 0,      *             recv_bytes: 1068,      *             kbps: {      *                 recv_30s: 0,      *                 send_30s: 0      *             },      *             publish: {      *                 //是否正在推流  有时候服务端流停推了 但是还有客户端在看 这个流还能查到 但是  active 为false      *                 active: false,      *                 cid:      *             },      *             video: null,      *             audio: null      *         }      *     ]      * }      *      *      *      * http://127.0.0.1:1985/api/v1/clients      *      *{      *     code: 0,      *     server: vid-f1gt8j3,      *     clients: [      *         {      *             id: 868249e9,      *             vhost: vid-5847096,      *             stream: vid-778ujy0,      *             ip: 172.17.0.1,      *             pageUrl: ,      *             swfUrl: ,      *             tcUrl: rtmp://127.0.0.1:1935/live,      *             url: /live/9,      *             //类型是 fmle-publish 推流  删除掉这个推流就会停止      *             //类型是 rtmp-play 拉流 删除掉这个拉流就会停止      *             //剔除方法 Method DELETE  api   /api/v1/clients/{id} 停止推流/踢掉用户端      *             type: fmle-publish,      *             publish: true,      *             alive: 16.18,      *             kbps: {      *                 recv_30s: 0,      *                 send_30s: 0      *             }      *         }      *     ]      * }      *      *      * param channel      */ GetMapping(/start)ResponseBodypublic void start(RequestParam(defaultValue 1) String channel){RtspUrlBuilder builder new RtspUrlBuilder();RtmpUrlBuilder rtmpUrlBuilder new RtmpUrlBuilder();//构建 rtsp 这个是客户的nvr rtsp 地址 只有channel 是灵活的 他们是64路 现在接了50多摄像头对应50 多路channelString rstp builder.setUsername(admin).setPassword(xx).setIpAddress(xx).setChannel(channel).build();//这个是流媒体服务器的rtmp 推流地址String rtmp rtmpUrlBuilder.setApplication(live).setStreamName(channel).build();final String vcodeclibx264;String camera1String.format(RTSP_RTMP, rstp,vcodec,rtmp);//TODO 判断是否已经再推了 推就直接返回拉流地址processManager.startProcess(channel,camera1);//拉流地址和推流地址是一至的 除非 java 服务和srs 在一台服务器 那么 推流地址 rtmp ip为127.0.0.1 拉流 rtmp ip 为公网// 就是java通过ffmpeg 收流转发到本地 rtmp srs分发流 到公网去System.out.println(拉流地址rtmp);}GetMapping(/end)ResponseBodypublic void end(String channel){processManager.terminateProcess(channel);}两个辅助类 package io.renren.common.live;/*** author chenkang* date 2023-8-3 12:27*/ public class RtspUrlBuilder {private String username;private String password;private String ipAddress;private int port;private String channel;private int subtype;public RtspUrlBuilder() {// 默认端口为554this.port 554;// 默认子类型为0this.subtype 0;}public RtspUrlBuilder setUsername(String username) {this.username username;return this;}public RtspUrlBuilder setPassword(String password) {this.password password;return this;}public RtspUrlBuilder setIpAddress(String ipAddress) {this.ipAddress ipAddress;return this;}public RtspUrlBuilder setPort(int port) {this.port port;return this;}public RtspUrlBuilder setChannel(String channel) {this.channel channel;return this;}public RtspUrlBuilder setSubtype(int subtype) {this.subtype subtype;return this;}public String build() {return rtsp:// username : password ipAddress : port /cam/realmonitor?channel channel subtype subtype;} } package io.renren.common.live;/*** author chenkang* date 2023-8-3 12:30*/ public class RtmpUrlBuilder {private String ipAddress;private int port;private String application;private String streamName;public RtmpUrlBuilder() {// 默认IP地址为127.0.0.1this.ipAddress 127.0.0.1;// 默认端口为1935this.port 1935;}public RtmpUrlBuilder setIpAddress(String ipAddress) {this.ipAddress ipAddress;return this;}public RtmpUrlBuilder setPort(int port) {this.port port;return this;}public RtmpUrlBuilder setApplication(String application) {this.application application;return this;}public RtmpUrlBuilder setStreamName(String streamName) {this.streamName streamName;return this;}public String build() {return rtmp:// ipAddress : port / application / streamName;} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外贸网站seo优化方案成都网站建设 哪家比较好

mac地址(物理地址) mac地址和ip地址,目的都是为了区分网络上的不同设备的,在最开始的时候,mac地址和ip地址是两伙人,独立各自提出的,ip地址是4个字节(早都不够用了)&…

北京网站建设学校wordpress 微博 插件

根据SOC FPGA之HPS模型设计(一), Quartus工程经过全编译后会产生Handoff文件夹、SOPCINFO文件、SVD文件 二、生成Preloader镜像文件 通过信息交换文件Handoff文件生成Preloader,需要用到SOC EDS Preloader也被称为spl(Second Program Loader)或u-boot…

合肥网站排名提升编程教育机构

提前声明: 本文内容为华北水利水电大学研究生C课程,如有 侵权请告知,作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类:声明语句 指示编译器分配内存,或者提供程序…

网站的做用陵水网站建设方案

近年来,随着nodejs的突飞猛进,node项目数量增长迅猛,node项目完美的阐释了“开箱即用”的理念。小到创业公司,大到阿里这样的巨头,背后均有node的身影。 node项目基于Chrome的V8引擎,使用JavaScript&#x…

适合网站设计的gif图片怎样建个小公司的网站

在上一篇文章中,我们已经开始讨论基于消息的通信中的消费者驱动的合同测试 。 在今天的帖子中,我们将在测试工具箱中包含另一个工具,但是在此之前,让我对显微镜下的系统进行快速回顾。 它有两项服务, 订单服务和货运服…

国外网站购物百度下载安装2021

微软Webcast课程下载软件iReaper正式登陆Android平台,我叫它iReaper for Android。目前正处于测试阶段,功能比较单一。 目前支持 1.视频下载 2.课程代码下载 3.讲义下载 4.问答下载 附上截图,敬请期待! 1.下载地址&#xff…

网站建设补贴wordpress 图床

文章目录 模板语法1、文本2、原始 HTML3、属性 Attribute4、使用 JavaScript 表达式 条件渲染1、v-if2、v-else3、v-show4、v-if vs v-show 的区别 列表渲染1、用 v-for 把一个数组映射为一组元素2、维护状态 事件处理1、监听事件 v-on2、事件处理方法3、内联处理器中的方法 表…

东莞知名网站推广网站后台怎么做下载链接

题目: 给你一个区间数组 intervals ,其中 intervals[i] [starti, endi] ,且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j ,并满足 startj > endi ,且 startj 最小化 。注意 i 可能等于 j 。 返回…

郑州网站建设程序朋友圈营销广告

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

收录好的网站有哪些网站建设的知名品牌

在本文中,我们将探讨如何使用Flask和Flask-JWT-Extended库来保护您的API免受跨站请求攻击(CSRF)。我们将首先简要介绍CSRF攻击的概念,然后详细说明如何使用Flask-JWT-Extended库来保护您的API。 什么是跨站请求攻击(C…

比赛网站开发wordpress 路由怎么配

servlet3异步在深入了解什么是异步Servlet之前,让我们尝试了解为什么需要它。 假设我们有一个Servlet,处理时间很长,如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

设计师常去网站成都网站建设案例单招网

--- 24.4.20 目录 1、什么是Bug? 2、什么是调试(Debug)? 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…

网站建设优化规划书如何构建成交型网站

一、什么是Json?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999的一个子集。 JS…

app网站下载免费珠海网站建设公司有哪些

本文介绍了如何使用STM32驱动压力传感器进行实时监测。首先,我们会介绍压力传感器的工作原理和常见类型。然后,我们将介绍如何选择合适的STM32单片机和压力传感器组合。接下来,我们会详细讲解如何使用STM32驱动压力传感器进行数据采集和实时监…

一个主机建多少个网站wordpress md5解密

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log(没掌握MyISAM 和 InnoDB 有什么区别? 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…

打字建站宝微信平台制作网站开发

使用 Tye 辅助开发 k8s 应用竟如此简单(一)使用 Tye 辅助开发 k8s 应用竟如此简单(二)续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何对数据库进行链接。Newbe.Claptrap 是一个…

懒人模板网站网站商品展示设计

Domain Admin:一目了然,一键掌握,您的全方位图形化域名与SSL证书智能管家!- 精选真开源,释放新价值。 概览 Domain Admin是一个基于Python Vue3.js 技术栈实现的域名和SSL证书监测平台,旨在为用户打造一个…

程序员和网站建设企业搭建pc端网站

WPF列表性能提高技术 WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自ItemsControl的控件都支持该技术。 虚拟化 UI虚拟化是列表仅仅为当前显示项创建…

如何在电商平台做好企业网站推广不用框架做网站

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元 1、用万用表电阻挡测量实验板(箱)上电位器(可调电阻)的参数范围。 0~1kΩ电阻: 1k*0%=0 1k*100%=1k 所以范围为0~1k 0~10kΩ电阻: 10k*0%=0 10k*…

校园网站制作如何做好一名销售

本文作者:孙雪丽文字编辑:周聪聪技术总编:张学人重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束。另外爬虫俱乐部将于2019年7月5日至7月8日在武汉…