视频推流、视频处理、拉流、手机预览演示

视频推流、视频处理、拉流、手机预览演示

  • 版本信息
  • 操作步骤
    • 搭建rtmp服务
      • 安装pingos
      • 配置nginx(/usr/local/pingos/conf/nginx.conf) http端口为:8081
      • 启动nginx服务
    • 搭建rtmp鉴权和启动视频处理的服务
      • 下载ffmpeg用于拉流、视频处理、推流
      • rtmp推流服务的鉴权服务代码(rtmp_auth_srv.py)
      • 开启服务
    • 修改web主页为hls预览代码(/usr/local/pingos/html/index.html)
    • 推拉流演示
      • windows ffmpeg 循环推流
      • windows vlc 播放输出流
      • 打开浏览器播放(http://192.168.1.100:8081)

本文介绍了如何用ffmpeg和nginx实现推流,服务器收到推流请求后,进行鉴权,之后用ffmpeg filter对视频做分析,并将结果编码推流到nginx服务器。手机或PC客户通过web预览hls.

主要流程:

  • ffmpeg推流到pingos搭建的rtmp服务器, rtmp服务器支持hls
  • rtmp服务器收到push请求后,通过http协议将流信息传入鉴权http服务器
  • 鉴权服务收到请求后,判断是否合法,如果不合法则返回404,则客户端推流失败
  • 如果鉴权成功,则创建ffmpeg进程,从上面的rtmp输入源拉流,通过ffmpeg filter对视频做进一步处理(这里以logo叠加为例),再推理到rtmp服务器
  • 最后通过html5的video功能播放hls

url参数说明:

  • app name:input。input为客户端推流 output为视频filter处理后推流

  • stream name: %token%%model_level%%detection_size%%detection_thresold%%encode_bitrate%_%uuid%
    如: Hi20240217_0_1280_20_2000000_uuid2

  • token: 固定为Hi20240217,防止非法用户推流

  • model_level: 算法等级别[0,1,2,3],级别越高精度越高

  • detection_size: 监测算法的输入分辨率,越大,精度越高,性能越低

  • detection_thresold: 检测结果置信度过滤的阈值

  • encode_bitrate: 编码的码流bps

  • uuid: 用户自定义不包括以下字符:_?&

版本信息

属性
操作系统CentOS Linux release 7.6.1810
pingosv1.0
windows ffmpeg2024-02-22-git-76b2bb96b4
linux ffmpeg6.1

操作步骤

搭建rtmp服务

安装pingos

wget https://github.com/pingostack/pingos/archive/refs/tags/v1.0.tar.gz
tar -xf v1.0.tar.gz
cd pingos-1.0/
rm -rf /usr/local/pingos/
./release.sh -i

配置nginx(/usr/local/pingos/conf/nginx.conf) http端口为:8081

user  root;
daemon on;
master_process on;
worker_processes  1;
error_log  logs/error.log  info;
worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;
pid        logs/nginx.pid;
events {use epoll;worker_connections  65535;multi_listen unix:/tmp/http 8081;multi_listen unix:/tmp/rtmp 1935;dynamic_refresh_interval 5s;dynamic_domain_buckets   1001;resolver 114.114.114.114  valid=1m;resolver_timeout 30s;
}rtmp {log_format log_bandwidth '{"app":"$app","name":"$name","bitrate":$bitrate,"args":"$args","timestamp":$ntp,"ts":"$time_local","type":"$command","remote_addr":"$remote_addr","domain":"$domain"}';access_log logs/bandwidth.log log_bandwidth trunc=60s;server {listen 1935;serverid 000;out_queue 10240;server_name live.pingos.io;rtmp_auto_pull on;rtmp_auto_pull_port unix:/tmp/rtmp;application input {live on;hls on;hls_path /tmp/hls/input;hls_fragment 4000ms;hls_playlist_length 12000ms;hls_type live;mpegts_cache_time 20s;wait_key on;wait_video on;cache_time 1s;send_all on;low_latency on;hevc_codecid  12;oclp_publish    http://127.0.0.1:9990/video/notify/publish args=stream=$stream stage=start,done;}application output {live on;hls on;hls_path /tmp/hls/output;hls_fragment 4000ms;hls_playlist_length 12000ms;hls_type live;mpegts_cache_time 20s;wait_key on;wait_video on;cache_time 1s;send_all on;low_latency on;hevc_codecid  12;}}
}http {include       mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';proxy_headers_hash_max_size 51200;proxy_headers_hash_bucket_size 6400;client_max_body_size 4096m;proxy_buffer_size 10240k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 16 10240k; #proxy_buffers缓冲区,网页平均在32k以下的设置proxy_busy_buffers_size 20480k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 20480k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传access_log  logs/access.log  main;sendfile        on;keepalive_timeout  65;server {listen 8081;location /rtmp_stat {rtmp_stat all;rtmp_stat_stylesheet /stat.xsl;}location /xstat {rtmp_stat all;}location /sys_stat {sys_stat;}location /sys_stat_proxy/ {rewrite ^/proxy/(.*) /sys_stat break;proxy_pass http://$1:;}location ~ .mp4$ {root html;}location /control {rtmp_control all;}location /flv {flv_live 1935 app=live;chunked_transfer_encoding off;}location /ts {ts_live 1935 app=live;expires -1;add_header 'Access-Control-Allow-Origin' '*';add_header "Access-Control-Allow-Credentials" "true";add_header "Access-Control-Allow-Methods" "*";add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";add_header "Access-Control-Expose-Headers" "*";}location /input {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp/hls;expires -1;add_header Cache-Control no-cache;add_header 'Access-Control-Allow-Origin' '*';add_header "Access-Control-Allow-Credentials" "true";add_header "Access-Control-Allow-Methods" "*";add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";add_header "Access-Control-Expose-Headers" "*";}location /output {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp/hls;expires -1;add_header Cache-Control no-cache;add_header 'Access-Control-Allow-Origin' '*';add_header "Access-Control-Allow-Credentials" "true";add_header "Access-Control-Allow-Methods" "*";add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";add_header "Access-Control-Expose-Headers" "*";}location / {chunked_transfer_encoding on;root html/;}}
}

启动nginx服务

cd /usr/local/pingos/
killall -9 nginx
./sbin/nginx
cd -

搭建rtmp鉴权和启动视频处理的服务

下载ffmpeg用于拉流、视频处理、推流

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg-release-amd64-static.tar.xz

rtmp推流服务的鉴权服务代码(rtmp_auth_srv.py)

import os
from flask import Flask,redirect,Response,request,jsonify
import subprocess
from urllib import parse
from urllib.parse import urlparse
from flask import abort
import psutil
import time
import os
import os.path
from ctypes import *
import time
import psutil
import loggingapp = Flask(__name__,static_folder="")def judgeprocess(processname):try:pl = psutil.pids()for pid in pl:if psutil.Process(pid).name() == processname:return pidelse:return Noneexcept:return None

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

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

相关文章

优化进化算法

基本概念 进化算法(Evolutionary Algorithms, EAs)是受自然选择和生物进化机制启发而发展起来的一类优化算法。它们使用模拟生物进化的技术来解决复杂的优化问题,其核心思想是通过选择(Selection)、遗传(C…

海外KOL合作指南:如何专业询价并成功建立合作关系?

近几年,随着社交媒体的迅速发展,与海外KOL合作已成为许多企业推广业务的有效手段。海外KOL具有庞大的粉丝基础和广泛的影响力,与他们合作可以帮助企业扩大品牌知名度、提高产品销售等方面取得显著成果。然而,如何向海外KOL询价&am…

与web3.0有关的科技热词的提问和SmartChat给出的回答

Q1. 请解释热词:元宇宙、web3.0、区块链、去中心化、比特币、以太坊、智能合约、NFT、EOS、DAO、Defi、Gamefi、Altcoin 当代科技领域出现了许多热门词汇,以下是这些词汇的解释: 元宇宙(Metaverse):元宇…

123123132

GAaFWqDgpYHctHlalFiAGwnyLfjWSFiYNZyGU

R语言【base】——writeLines()

Package base version 4.2.0 Description 向连接写入文本行。 Usage writeLines(text, con stdout(), sep "\n", useBytes FALSE) Arguments 参数【text】:一个字符向量。 参数【con】:一个 connection 对象 或 一个字符串。 参数【se…

设计模式学习笔记 - 面向对象 - 8.实践:贫血模型和充血模型的原理及实践

1.Web开发常用的贫血MVC架构违背OOP吗? 前面我们依据讲过了面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格,基于接口而非实现编程和多用组合少用继承设计思想。接下来,通过实战来学习如何将这些理论应用到实际的开发中。 大部…

Linux常见命令 | 文件传输命令scp

文章目录 scp介绍scp命令场景1.上传本地文件到服务器2.上传本地目录到服务器3.从服务器下载文件4.从服务器下载目录 scp介绍 scp是secure copy的简写,是用于在Linux下进行远程拷贝文件的命令。 scp传输是加密的,可能会稍微影响一下速度。另外&#xff…

leetcode初级算法(python)- 数组

文章目录 1.从排序数组中删除重复项2.买卖股票最佳时机23.旋转数组运行颠倒列表法整体移动元素块法4.存在重复运行包含判断法排序比较判断法运行集合判断法5.只出现一次的数字6.两个数组的交集27.移动零8.两数之和9.旋转图像这篇博客中的代码都是数组计算。 1.从排序数组中删除…

自动化部署证书 acme.sh 使用教程

简介 acme.sh 是一个开源的 ACME 协议的客户端工具,用于自动化申请、更新和部署 SSL/TLS 证书。通过使用 acme.sh,用户可以轻松地在服务器上设置 HTTPS 加密连接,而无需手动操作。它支持多种 DNS 接口和证书颁发机构,可以与各种 …

U盘拒绝访问?快速恢复数据的实用方案!

当您尝试访问U盘时,突然遇到“U盘拒绝访问”的提示,这无疑是一个令人头疼的问题。这不仅意味着您无法读取或写入U盘中的数据,还可能意味着重要文件的安全受到威胁。本文将深入探讨U盘拒绝访问的原因,并为您提供至少两种实用的数据…

electron+vue3全家桶+vite项目搭建【27】封装窗口工具类【1】雏形

文章目录 引入思路抽出公共声明文件抽出全局通用数据类型和方法主进程模块1.抽离基础常量2.封装窗口工具类 渲染进程模块测试结果 引入 demo项目地址 可以看到我们之前在主进程中的逻辑全部都塞到index.ts文件中,包括窗口的一些事件处理,handle监听&am…

机器学习打分函数在分子对接中的应用系列-GB_Score

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、GB-Score是什么?二、文献复现 -训练和验证环境1. GB score验证虚拟环境的配置2. Usage1- Preparing ligand and protein file2- Generating features3 - Repeat and extend current…

Linux第66步_linux字符设备驱动_挂载和卸载

1、了解linux中的驱动类型: 1)、字符设备驱动 字符设备是limnux驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。如:GPIO输入输出、UART、I2C、SPI、USB、LCD、音频…

基于相位的运动放大:如何检测和放大难以察觉的运动(01/2)

基于相位的运动放大:如何检测和放大难以察觉的运动 目录 一、说明二、结果的峰值三、金字塔背景3.1 可操纵金字塔3.2 亚倍频程复数可控金字塔 四、基本方针4.1 1D 问题陈述4.2 一维方法4.3 实际实施说明 五、放大倍率的限制5.1 空间支持的影响5.2 频带的影响 六、推…

好书推荐丨细说Python编程:从入门到科学计算

文章目录 写在前面Python简介推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本Python基础入门的全新正版书籍,对Python、机器学习、人工智能感兴趣的小伙伴们快来看看吧~ Python简介 Python 是一种广泛使用的高级、解…

正交多项式

介绍 正交多项式是数学中一类具有特殊性质的多项式。假设我们有一个权重函数 μ ( x ) \mu(x) μ(x),它在某个区间 [ a , b ] [a, b] [a,b] 上是非负的。对于两个函数 f ( x ) f(x) f(x) 和 g ( x ) g(x) g(x),我们可以定义它们的加权内积为&#xf…

多目标追踪概述

1. 目标跟踪分类 单目标跟踪:在视频的初始帧画面上框出单个目标,预测后续帧中该目标的大小与位置多目标跟踪:追踪多个目标的大小和位置,且每一帧中目标的数量和位置都可能变化 2. 多目标跟踪目前的主要问题 形态变化&#xff1a…

做了个很牛的网站,可以搜索网站的网站到底有多好用?

今天给大家推荐的网站叫做:毒蘑菇 - 搜索 毒蘑菇搜索,顾名思义呢,搜索的功能比较好用,大家上网的时候总是需要记住网站的地址,即使你知道网站的名称,也得跳转到百度然后在搜索,有时候百度上那么…

天哪!还有这些逆天的fofa​语句?(二)

接上文 天哪!还有这些逆天的fofa语句? 再分享几条,个人觉得比较有意思的fofa语句。 情侣飞行器 之前写过文章的,有兴趣的师傅可以试着翻翻以前的文章去破解密码 fofa语句:"static/js/index.d2dcdf5b.js"…

sql-labs第46关(order by盲注脚本)

一、环境 网上有自己找 二、解释 order by 注入我们看他的true和false来进行注入出来 二、实操 让我们用sort 看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username: password: 可以看到顺序是不…