【流媒体】 通过ffmpeg硬解码拉流RTSP并播放

news2024/11/14 20:26:24

简介

目前RTSP拉流是网络摄像头获取图片数据常用的方法,但通过CPU软解码的方式不仅延时高且十分占用资源,本文提供了一种从网络摄像头RTSP硬解码的拉流的方法,并且提供python代码以便从网络摄像头获取图片进行后续算法处理。

下载ffmpeg

Ffmpeg下载链接。建议下载稳定版本。

图1

通过版本号命名的为稳定版,日期命名的为最新版。

图2

图3

复制如图所示的bin文件地址,设置环境变量。

右击此电脑打开属性

图4

图5

图6

图7

按照图4~7将复制的bin文件环境变量路径添加进去。

测试FFmpeg

运行命令

ffmpeg -version

显示以上信息则安装完成。

ffplay拉流显示

ffplay rtsp://XXXXXXX/stream

使用ffplay即可拉流成功,但是为软解码,拉流延时较高。

使用ffmpeg硬解码并保存视频

首先查看支持的硬件

ffmpeg -hwaccels

如果是nvidia的显卡并安装的对应驱动,也安装了cuda,则可以使用cuda跟h_264cuvid 解码器

查看可用的对应格式解码器

ffmpeg -codecs | findstr "h264"

红色框中为可用解码器。

利用硬件解码器的命令如下,以h264_cuvid为例:

ffmpeg -hwaccel cuda -vcodec h264_cuvid -i rtsp://admin:qwer1234@192.0.0.64/h264/ch1/main/av_stream output.mp4

-hwaccel 选择硬件模式

-vcodec  选择解码器

-i           RTSP地址

output.mp4 保存成.mp4视频     

note:硬解码器必须与硬件环境对应如:cuda  对应 h264_cuvid

测量延时

测量延时方法

  1. 将网络摄像头对准手机计时器
  2. 把手机靠近播放视频的电脑屏幕
  3. 同时拍摄手机与电脑屏幕显示的计时器,可计算毫秒级延时 。

具体如下面的图片所示。

利用ffplay拉流时延时

延时时间:7580 – 6130 = 1450ms

此时采用CPU软解,故延时较高。

利用ffmpeg硬解码拉流时延时

延时时间:3390 – 2680 = 710ms

可见硬解码降低了RTSP延时。

查看任务管理器的GPU界面栏

双击红色区域放大GPU显示

当Video Decode出现波动时代表调用了硬件解码器。

python调用ffmpeg转成opencv的mat格式并显示

首先安装ffmpeg-python、opencv-python、Numpy

pip install ffmpeg-python

pip install opencv-python

pip install numpy

此时还需要环境中安装了Cuda。

Cuda安装网络资源很多,在此不做赘述。

Code

import cv2
import ffmpeg
import numpy as np

# RTSP 流地址
rtsp_url = "rtsp://admin:qwer1234@192.0.0.64/h264/ch1/main/av_stream"

# 创建 FFmpeg 进程
probe = ffmpeg.probe(rtsp_url)
video_info = next(stream for stream in probe['streams'] if stream['codec_type'] == 'video')
width = video_info['width']
height = video_info['height']


ffmpeg_cmd = (
    ffmpeg
    .input(rtsp_url, hwaccel='cuda', vcodec='h264_cuvid')
    .output('pipe:', format='rawvideo',pix_fmt='bgr24')
    .run_async(pipe_stdout=True)
)

# 读取并显示视频帧
while True:
    in_bytes = ffmpeg_cmd.stdout.read(width * height * 3)
    if not in_bytes:
        break
    frame = (
        np
        .frombuffer(in_bytes, np.uint8)
        .reshape([height, width, 3])
    )
    cv2.imshow('RTSP Stream (GPU)', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

ffmpeg_cmd.wait()
cv2.destroyAllWindows()

上述Code即可通过python调用ffmpeg并且能够与opencv交互,能为后续开发图像算法做一个前端。

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

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

相关文章

回归求助 教程分享

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 217/10000 抱个拳,送个礼 更多内容,见微*公号往期文章:通透!!十大回…

Python | Leetcode Python题解之第233题数字1的个数

题目: 题解: class Solution:def countDigitOne(self, n: int) -> int:# mulk 表示 10^k# 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k)# 但为了让代码看起来更加直观,这里保留了 kk,…

计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)

IP地址与MAC地址 由于MAC地址已固化在网卡上的ROM 中,因此常常将 MAC地址称为硬件地址或物理地址;物理地址的反义词就是虚拟地址、软件地址或逻辑地址,IP地址就属于这类地址。 从层次的角度看,MAC地址是数据链路层使用的地址&…

基于lstm的股票Volume预测

LSTM(Long Short-Term Memory)神经网络模型是一种特殊的循环神经网络(RNN),它在处理长期依赖关系方面表现出色,尤其适用于时间序列预测、自然语言处理(NLP)和语音识别等领域。以下是…

特殊记忆柱群、特殊感觉中枢、强度中枢

智能软件的某些思维状态的标志,能够被一般感觉中枢“先天”感知,或者是与一般感觉中枢“后天”建立记忆联系。在它们建立奖惩记忆联系后,这些思维状态能够兴奋特殊感觉中枢或者一般感觉中枢对应的记忆柱群,也能够被相应感觉中枢的…

【大模型书籍】复旦新出!大规模语言模型:从理论到实践(推荐)

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

【数学建模】——力学模型建立的基本理论及方法

目录 一、基本理论 1. 牛顿力学 1.1 牛顿第一定律&#xff08;惯性定律&#xff09; 1.2 牛顿第二定律&#xff08;动力学定律&#xff09; 1.3 牛顿第三定律&#xff08;作用反作用定律&#xff09; 2. 能量守恒定律 2.1 动能和势能 2.2 能量守恒 3. 动量守恒定律…

简易秒表的实现

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 请编写一个模块&#xff0c;实现简易秒表的功能&#xff1a;具有两个输出&#xff0c;当输出端口second从1-60循环计数&#xff0c;每当second计数到60&#xff0c;输出端口minute加一&#xff0c;一直…

java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx

通过访问日志自动添加国外ip黑名单 创建一个类&#xff0c;自己添加一个main启动类即可测试 import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONObject; import org.sp…

Azcopy Sync同步Azure文件共享

Azcopy Sync同步Azure文件共享 一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名&#xff08;SAS&#xff09;令牌配置权限示例生成的 URL 四、Azco…

Java小白入门到实战应用教程-开发环境搭建-IDEA2024安装激huo详细教程

writer:eleven 安装IDEA2024 一、下载IDEA 推荐大家去官网下载 我这里也给大家直接准备了安装包&#xff0c;和激huo教程&#xff0c;大家可以自行下载使用。 注意&#xff1a;激huo教程只用于学习交流&#xff0c;不可商用。 IDEA2024安装包及激huo教程 说明&#xff1a…

prompt第二讲-langchain实现中英翻译助手

文章目录 prompt模板 (prompt template)langchain 中的prompt模板 (prompt template)langchain实现中英翻译助手 prompt模板 (prompt template) 开篇我介绍了在llm中&#xff0c;通常输入的那个字符串会被我们称之为prompt&#xff0c;下面就是一个中英文翻译助手的prompt例子…

使用F1C200S从零制作掌机之USB从机

OTG做从机&#xff0c;实现使用RNIDS功能访问网络&#xff0c;实现模拟成U盘PC可访问。 最后实现OTG的软件主从切换。 一、RNDIS 设备树的otg模式先设置为&#xff1a;peripheral &usb_otg {dr_mode "peripheral"; /* otg host peripheral */status "…

基于springboot+vue+uniapp的超市购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Android Studio启动报错:The emulator process for AVD Pixel_5_API_30 has terminated

Android Studio启动AVD报错&#xff1a; The emulator process for AVD Pixel_5_API_30 has terminated. 原因&#xff1a;安装时使用自定义安装后&#xff0c;修改了默认安装目录。 而avd文件默认在 C:\Users\用户名\.android 目录下。所以导致打开AVD时报错。 解决方法&am…

WIFI连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 1 实现功能…

数据结构——考研笔记(二)线性表的定义和线性表之顺序表

文章目录 二、线性表2.1 定义、基本操作2.1.1 知识总览2.1.2 线性表的定义2.1.3 线性表的基本操作2.1.4 知识回顾与重要考点 2.2 顺序表2.2.1 知识总览2.2.2 顺序表的定义2.2.3 顺序表的实现——静态分配2.2.4 顺序表的实现——动态分配2.2.5 知识回顾与重要考点2.2.6 顺序表的…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

Perl语言之数组

Perl数组可以存储多个标量&#xff0c;并且标量数据类型可以不同。   数组变量以开头。访问与定义格式如下&#xff1a; #! /usr/bin/perl arr("asdfasd",2,23.56,a); print "输出所有:arr\n"; print "arr[0]$arr[0]\n"; #输出指定下标 print…

Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用

目录 开始 Prometheus 介绍 基本原理 组件介绍 下文部署组件的工作方式 Prometheus 生态安装&#xff08;Mac&#xff09; 安装 prometheus 安装 grafana 安装 node_exporter Prometheus 生态安装&#xff08;Docker&#xff09; 安装 prometheus 安装 Grafana 安装…