Python进行ffmpeg推流和拉流rtsp、rtmp

2023-05-16

流媒体协议,英文学名Streaming Protocol,用一句人话来解释:流媒体协议是一种用于通过 Web 传递多媒体的协议。传统视频流协议:RTMP和RTSP,其中 RTMP 是基于 TCP 开发的,那么 RTSP 使用到了 UDP

1.RTMP(Real Time Messaging Protocol,实时消息协议)

  • 底层协议:TCP
  • 视频编解码器:H.264
  • 音频编解码器:AAC
  • 延迟:3 - 30 秒

RTMP 的最大优点是可以在服务器和客户端服务器之间保持稳定的连接,无论用户的互联网连接质量如何,它都可以无缝低延迟进行流媒体传输。这个技术主要通过将数据流分成相等的小部分(音频数据默认为 64 字节,视频数据默认为 128 字节)并将它们顺序传输到接收设备,然后将它们重新组合成视频流来实现的。

RTMP 工作原理 ⭐

  1. 摄像头捕获视频
  2. 通过编码器视频流传输到视频平台服务器
  3. 视频平台处理视频流
  4. 通过CDN分发到离用户最近的服务器
  5. 最后视频流就能成功的到达用户设备

那么这个环节中RTMP就起到了非常重要的作用,在视频从摄像头到服务器的过程中,RTMP将大量数据分割成小块并跨多个虚拟通道传输,在视频源和 RTMP 服务器之间提供了稳定和流畅的视频流。

2.RTSP(Real Time Streaming Protocol,实时流协议)

  • 底层协议:TCP 和 UDP
  • 视频编解码器:H.265
  • 音频编解码器:AAC
  • 延迟:2 秒

RTSP 工作原理 ⭐

  1. 用户设备向视频流平台发送 RTSP 请求
  2. 视频流平台返回可以操作的请求列表,比如播放、暂停等
  3. 用户设备向视频流平台发送具体的请求,比如播放
  4. 视频流平台解析请求并调用指定机制启动视频流处理

由于 RTSP 依赖于专用服务器,并且依赖于 RTP,因此该协议不支持加密视频内容或重传丢失的数据包。

3.FFmpeg

FFmpeg 是一款用于多媒体处理的自由软件工具,基于 GPL 许可证发布。FFmpeg 提供的最核心的命令行工具是 “ffmpeg”,“ffmpeg” 命令行工具的主要特征是输出过程快、输出品质高、输出文件小。“FFmpeg” 中 “FF” 表示 “Fast Forward”,“mpeg” 表示 “Moving Pictures Experts Group”。

FFmpeg 提供如下四个命令行工具:

  • ffmpeg 音视频编码器/解码器
  • ffplay 媒体播放器
  • ffprobe 显示媒体文件信息
  • ffserver 多媒体流广播服务器,使用 HTTP 和 RTSP 协议。FFmpeg 4.1 版本已经删除 ffserver,新的替代者还未添加进来。

命令行实现:(和VLC工具等效)

ffmpeg推流rtsp

ffmpeg -re -i 1.mp4 -vcodec copy -codec copy -f rtsp rtsp://127.0.0.1:554/stream

推摄像头视频

ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport udp -f rtsp rtsp://127.0.0.1/stream

ffplay拉流播放

ffplay rtsp://127.0.0.1:554/stream

4.python实现ffmpge的rtsp和rtmp推流拉流(待更)

# 本地摄像头推流
import queue
import threading
import cv2
import subprocess as sp
 
# 自行设置,url为推送的服务器地址
rtmpUrl = "rtmp://localhost:1935/live/test"
cap = cv2.VideoCapture(0)
 
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
 
# ffmpeg command
command = ['ffmpeg',
                '-y',
                '-f', 'rawvideo',
                '-vcodec', 'rawvideo',
                '-pix_fmt', 'bgr24',
                '-s', "{}x{}".format(width, height),
                '-r', str(fps),
                '-i', '-',
                '-c:v', 'libx264',
                '-pix_fmt', 'yuv420p',
                '-preset', 'ultrafast',
                '-f', 'flv',
                rtmpUrl]
 
# 设置管道
p = sp.Popen(command, stdin=sp.PIPE)
while True:
    ret, frame = cap.read()
    p.stdin.write(frame.tostring())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进行ffmpeg推流和拉流rtsp、rtmp 的相关文章

随机推荐

  • C语言数组小记1

    在一维数值里 xff1a xff08 假设a 0 的地址为2000 xff09 如 xff1a int a 61 10 9 8 7 6 5 xff1b printf xff08 d d d xff0c a xff0c a 0 xff0c a
  • C语言数组小记2

    示例 xff1a 在二维数组下行与列的问题 如 xff1a int a 3 3 61 9 8 7 6 5 4 3 2 1 假设我们a 0 0 的地址是2000 xff0c a 0 1 的地址是2004 xff0c 相差4个字节 printf
  • 正点stm32串口中断理解

    首先把程序放上来 xff0c 最后结论总结在最后 u8 USART RX BUF USART REC LEN u16 USART RX STA 61 0 void USART1 IRQHandler void 串口1中断服务程序 u8 Re
  • windows用xrdp方式远程桌面连接ubuntu

    windows系统 xff1a win10 ubuntu系统 xff1a 18 04 5 参考文章 xff1a https forum ubuntu org cn viewtopic php f 61 54 amp p 61 3221658
  • Linux中用vim编辑器打开时自动补入头文件,注释方法

    1 首先我用的是乌班头的linux xff0c 打开终端 2 通常我们打开终端的时候是直接在home目录下3 我们直接直接退到根目录下 xff0c 找到etc目录 4 输入sudo vi etc vim vimrc 其实熟练的也可以234步
  • HTTP中get、post、put、delete的区别

    今天开发遇到了 put请求 xff0c 顺便过来拔拔草 xff01 先说说最常用的get请求跟post请求的区别 xff1a GET请求 xff1a 一般是获取服务器资源 xff1b get请求的查询参数需要挂载请求地址中 xff1b 请求
  • ubuntu网络无法连接(桥接模式)

    ubuntu桥接模式网络无法连接 问题描述 问题描述 最近几天遇到了一个网络配置问题 xff0c 因为之前的虚拟机崩了 xff0c 我就跟换了ubuntu21 04版本 xff0c 创建虚拟机的时候就选了桥接模式 xff0c 虚拟网络编辑器
  • centos7安装Prometheus+Grafana步骤

    sentos7安装Prometheus 43 Grafana 环境部署规划表 服务端 监视器 Prometheus服务端 Grafana服务端CentOS 7 9grafana192 168 3 230客户端 被监控主机 CentOS 7
  • gitlab-ce安装

    gitlab ce安装 sentos 下载 wget http mirrors tuna tsinghua edu cn gitlab ce yum el7 gitlab ce 12 9 0 ce 0 el7 x86 64 rpm 2021
  • gitlab-runner升级

    gitlab runner版本升级 添加GitLab官方仓库 For Debian Ubuntu Mint curl L https packages gitlab com install repositories runner gitla
  • docker可视化工具Shipyard

    Docker Shipyard Shipyard简介 shipyard是一个开源的docker管理平台 xff0c 其特性主要包括 xff1a 支持节点动态集群 xff0c 可扩展节点的规模 xff08 swarm etcd方案 xff09
  • jira8安装

    Jira8 3 3安装 下载jira安装包 xff0c 破解包和jdk包 链接 xff1a https pan baidu com s 1yHsXkW1ZpkcNQeBkvE Hog 提取码 xff1a zzzz 安装数据库 网上很多就不在
  • goteleport10.0本地安装使用

    goteleport10 0本地安装使用 环境说明 master xff1a 192 168 8 132 node1 xff1a 192 168 8 131 node2 xff1a 192 168 8 133 master本地生成域名证书
  • [csp2019]Emiya家今天的饭

    作为提高组 d 2 t 1 d2t1 d 2 t 1 xff0c 比去年难 所以这道题我打的特别的差 32pts 这道题我们很显然可以看到可以打一个暴力 复杂度
  • React 函数组件导出自定义方法的办法说明

    在进行React开发时 xff0c 函数组件是比较方便的 xff0c 由于函数组件没有this指针 xff0c 因此如果想在父组件里调用函数型子组件的方法 xff0c 就需要用到React useImperativeHandle 这个帮助函
  • centos7防火墙关闭telnet端口不通

    root 64 zabbix agen2 systemctl status firewalld firewalld service firewalld dynamic firewall daemon Loaded loaded usr li
  • centos7安装配置夜莺V5+睿象云实现电话短信告警

    服务器清单 hostnameipmaster192 168 8 128zabbix agen1192 168 8 134 master安装夜莺依赖 install prometheus mkdir p opt prometheus wget
  • (踩坑指南)cd .ssh返回-bash: cd: .ssh:No such file or directory怎么办

    1 cd ssh返回 bash cd ssh No such file or directory怎么办 出现如下界面 有时候没必要在细节上过于拘泥 xff0c 不如直接配置秘钥 xff0c 反而一切都妥妥的了 2 如何保存退出 xff1f
  • Python数据处理工具—去除TXT文件里面相同的数据

    前言 本次分享的是一个对TXT数据进行处理的一个小工具 xff0c 功能如题 xff0c 是把TXT里面相同的数据给清洗掉是剩下唯一的一个 一 数据 随便在文件里面写了一点数据 xff0c 可以看到里面有很多重复的数据 xff0c 那么里面
  • Python进行ffmpeg推流和拉流rtsp、rtmp

    流媒体协议 xff0c 英文学名Streaming Protocol xff0c 用一句人话来解释 xff1a 流媒体协议是一种用于通过 Web 传递多媒体的协议 传统视频流协议 xff1a RTMP和RTSP xff0c 其中 RTMP