当前位置: 首页 > news >正文

流媒体服务实现H5实时预览视频

目录

  • 背景
  • 方案
    • 业务实践
    • 细节注意
  • 待办

背景

客户aws服务磁盘存储告急,最高可扩容16T。排查如下:主要是视频文件存在大量复制使用的情况。例如发布节目时复制、预览时复制,这样上传一份视频后最大会有四份拷贝(预览、普通发布、互动发布),但是却有只有一份视频是被终端播放时使用。

方案

预览时,通过ffmpeg工具将原视频处理成video标签可正常播放的音视频流(h264、帧率25以下…参照GTV标准品预览视频格式要求),推送到流媒体服务器上,然后将前端拉该视频流喂给H5的video容器。
在这里插入图片描述

业务实践

FFmpeg支持推流多种形式的流,主要取决于推流协议和容器格式的组合。以下是一些常见的推流形式:

  1. RTMP(Real-Time Messaging Protocol)流:通过RTMP协议推流,可以实现实时音视频流传输。
  2. RTSP(Real-Time Streaming Protocol)流:通过RTSP协议推流,通常用于实时监控和视频流传输。
  3. HLS(HTTP Live Streaming)流:通过HLS协议推流,适用于分段传输和适应不同网络条件的流媒体。
  4. MPEG-TS(MPEG Transport Stream)流:通过MPEG-TS格式推流,常用于数字电视广播和多路复用的流媒体传输。
  5. WebRTC(Web Real-Time Communication)流:通过WebRTC协议推流,用于实时音视频通信和协作。
  6. SRT(Secure Reliable Transport)流:通过SRT协议推流,提供高可靠性和安全性的传输。
  7. UDP(User Datagram Protocol)流:通过UDP协议推流,通常用于低延迟的实时音视频传输。
  8. HTTP/HTTPS流:通过HTTP或HTTPS协议推流,适用于各种在线音视频服务和内容分发。

结合业务需求,以及调用常用方案现状,决定采取RTMP协议推流。
具体方案:FFmpeg (推流) —> (RTMP协议) —>nginx-http-flv-module(流媒体服务) —> (HTTP-FLV) —> Flv.js 。

步骤一:FFmpeg推流
推流命令:ffmpeg -ss 0 -re -i /usr/local/tomcat9.0.41/webapps/cdms//organization/1/video/1/57ffc736-e4bc-4788-b014-8d6c3cb0b908.mp4 -c:v libx264 -c:a aac -f flv -y rtmp://172.18.0.4:1935/live/57ffc736-e4bc-4788-b014-8d6c3cb0b908.mp4-timestamp=1698912705403

步骤二:流媒体服务处理
因为浏览器对rtmp流的支持和兼容性不一样(需要flash插件),所以需要流媒体服务器将rtmp流处理成http类型的流http-flv。

linux环境部署方式:

  1. 编译安装。(不推荐)
    好处:可以自定义功能选项。坏处:对编译环境要求较多,可能会遇到缺库或者版本不对等等一些列问题。
    编译资源及教程: https://github.com/winshining/nginx-http-flv-module
  2. docker镜像安装。(推荐)
    开源docker镜像,人家已经做好编译打包成docker镜像了,只需要自定义启动容器,然后自行修改服务配置即可。
    镜像推荐:mugennsou/nginx-http-flv
    github地址:https://github.com/mugennsou/http-flv
    部署命令:docker pull mugennsou/nginx-http-flv && docker run -it -d --restart always -p 8380:80 -p 1935:1935 --net cdms-network --ip 172.18.0.5 --name allsee-nginx-http-flv mugennsou/nginx-http-flv
    配置路径:/etc/nginx/conf.d/rtmp/rtmp.conf、/etc/nginx/conf.d/http/http.conf
    查看当前正在活动的流:http://ip:8380/stat在这里插入图片描述

步骤三:拉流播放
使用哔哩哔哩开源播放器:flvjs
作用:与流媒体服务建立连接,订阅流地址,实时拉流并喂给video标签进行播放。
在线demo: http://bilibili.github.io/flv.js/demo 根据上述推流过程,拉流播放地址是:http://ip:8380/live?app=live&stream=57ffc736-e4bc-4788-b014-8d6c3cb0b908.mp4-timestamp=1698912705403
项目地址:https://github.com/bilibili/flv.js
在这里插入图片描述

在这里插入图片描述

细节注意

  1. 查看当前正在活动的流 127.0.0.1:1935/stash
  2. 客户量较大,需要注意控制ffmpeg推流并发量。
  3. 客户关闭预览时,销毁推流进程,销毁flvjs播放器。(断开与流媒体服务的连接,释放资源)
  4. 考虑到多个客户对同一个视频进行预览,为了保证每次重新打开预览都是从0开始,每次预览需要保证推流地址不一样。(当前是拼接文件名和时间戳)
  5. 由于历史原因,大部分客户已习惯上传h264格式的mp4文件,这种视频是能通过video原生标签正常播放的,因此预览前需判断视频是否符合正常播放标准(参照GTV标准版视频格式),符合返回文件输出流,否则才走推流播放流程,降低开销。

待办

  1. flvjs自定义参数较多,有空可以再研究研究怎么搭配让播放体验最佳。
  2. 并发预览压测。如何测试巨大的预览并发量对服务器性能的影响。
  3. 流地址暂时采取的是文件名+时间戳,可优化为我们常用的唯一ID获取算法(雪花算法…)

相关文章:

流媒体服务实现H5实时预览视频

目录 背景方案业务实践细节注意 待办 背景 客户aws服务磁盘存储告急,最高可扩容16T。排查如下:主要是视频文件存在大量复制使用的情况。例如发布节目时复制、预览时复制,这样上传一份视频后最大会有四份拷贝(预览、普通发布、互动…...

C++适配器

文章目录 引言栈和队列 priority_queue仿函数迭代器区间 引言 栈的特性是先进后出,队列的特性是先进先出,然而双向队列同时具有栈和队列的特性,所以我们可以通过双向队列来适配出栈和队列。 先看库里面 栈和队列 stack和queue模板参数里面都…...

基于openresty waf二次开发多次匹配到的ip再做拉黑

我们想在openresty waf的基础上做二次开发,比如再精确一些。比如我们先匹配到了select的url我们先打分10分,匹配到cc 1000/s我们再给这个ip打10分…直到100分我们就拉黑这个ip。 [openresty waf][1] #cat reids_w.lua require lib local redis require…...

新一代构建工具Vite-xyphf

一、什么vite? vite:是一款思维比较前卫而且先进的构建工具,他解决了一些webpack解决不了的问题——在开发环境下可以实现按需编译,加快了开发速度。而在生产环境下,它使用Rollup进行打包,提供更好的tree-shaking、代码压缩和性能优化&…...

Flink源码解析三之执行计划⽣成

JobManager Leader 选举 首先flink会依据配置获取RecoveryMode,RecoveryMode一共两两种:STANDALONE和ZOOKEEPER。 如果用户配置的是STANDALONE,会直接去配置中获取JobManager的地址如果用户配置的是ZOOKEEPER,flink会首先尝试连接zookeeper,利用zookeeper的leadder选举服务发现…...

Flutter 常见错误记录总结

1、当 flutter pub get 指令报如下错误时: pub get failed command: "/Users/***/developer/flutter/bin/cache/dart-sdk/bin/dart __deprecated_pub --color --directory . get --example" pub env: { "FLUTTER_ROOT": "/Users/***/dev…...

[ASP]校无忧在线报名系统 v2.1

校无忧在线报名系统为了满足各地不同的报名人员的需求,为提供更为高效、方便、快捷的报名条件,同时也为减轻管理人员的工作难度;更为协调报名人员与管理人员的关系,快速提高了报名人员与管理人员的工作效率应运而生。系统适用于政…...

【Hydro】部分基流分割方法及程序代码说明

目录 说明一、数字滤波法单参数数字滤波Lyne-Hollick滤波法Chapman滤波法Chapman-Maxwell滤波法Boughton-Chapman滤波法 双参数滤波法Eckhardt滤波法 二、其他基流分割方法基流指数(BFI)法时间步长(HYSEP)法PART法加里宁-阿里巴扬…...

C#Regex正则表达式(Regular Expression)

在C#中,Regex是正则表达式(Regular Expression)的缩写,它是一种强大的文本匹配和处理工具。正则表达式是一种用于描述模式的字符串,它可以用来在文本中查找、替换和提取满足特定模式的内容。 在C#中,你可以…...

Wi-Fi还可以做什么?柯南解释IOT应用

大会报告:无线人工智能技术正在改变世界 Wi-Fi还可以做什么?随着带宽的提升,无线终端可以识别出更多的多径,每条多径都可以视作一个虚拟传感器,以感知周边环境。基于此,越来越多的无线感知产品应运而生。20…...

centos部署java程序

后台启动java程序 nohup java -jar -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/data/app1/logs/ /data/app1.jar --spring.config.location/data/app1/config/application.properties,/data/app1/config/application-dev.properties > /data/app1/logs 2>&1…...

Sqoop导入到Hive,Hive使用 HA

Sqoop写入Hive卡在连接Hive的JDBC上不执行 Sqoop访问 启用 HA模式的Hive 找到Hive的安装根目录&#xff1a;$HIVE_HOME/conf 创建一个新的配置文件&#xff1a;beeline-hs2-connection.xml <?xml version"1.0"?> <?xml-stylesheet type"text/xsl…...

[笔记] %的含义

取模 不赘述。 引导符 重点说一下在printf("%d", n);中的意思。 这里的意思是&#xff1a;将""外对应位置的结果返回给引导符所在的位置&#xff0c; %后面跟着的是结果对应的数据类型&#xff0c; 只有数据类型匹配才能正确输出结果。...

FRI及相关SNARKs的Fiat-Shamir安全

1. 引言 本文主要参考&#xff1a; Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…...

TensorFlow案例学习:使用 YAMNet 进行迁移学习,对音频进行识别

前言 上一篇文章 TensorFlow案例学习&#xff1a;简单的音频识别 我们简单学习了音频识别。这次我们继续学习如何使用成熟的语音分类模型来进行迁移学习 官方教程&#xff1a; 使用 YAMNet 进行迁移学习&#xff0c;用于环境声音分类 模型下载地址&#xff08;需要科学上网&…...

MySQL CHAR 和 VARCHAR 的区别

文章目录 1.区别1.1 存储方式不同1.2 最大长度不同1.3 尾随空格处理方式不同1.4 读写效率不同 2.小结参考文献 在 MySQL 中&#xff0c;CHAR 和 VARCHAR 是两种不同的文本数据类型&#xff0c;CHAR 和 VARCHAR 类型声明时需要指定一个长度&#xff0c;该长度指示您希望存储的最…...

虚拟机 ping: www.baidu.com:未知的名称或服务

1、打开ifcfg-ens33文件 vi /etc/sysconfig/network-scripts/ifcfg-ens332、如下&#xff0c;加上网关和dns就行了&#xff0c;紫色部分&#xff0c;也就是DNS1“114.114.114.114” TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTP…...

第二章 Python字符串处理

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…...

混合编程 ATPCS规范及案例(汇编调用C、C调用汇编、内联汇编)

1.混合编程的规范 2.汇编调用C 2.C调用汇编 3.内联汇编 例子&#xff1a;...

使用Gorm进行CRUD操作指南

使用GORM在Go中创建、读取、更新和删除记录的逐步教程 在数据库管理中&#xff0c;CRUD操作是应用程序的支柱&#xff0c;它们使数据的创建、检索、更新和删除成为可能。强大的Go对象关系映射库GORM通过抽象SQL语句的复杂性&#xff0c;使这些操作变得轻松。本文将作为您全面指…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...