文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python进行ffmpeg推流和拉流rtsp、rtmp实例详解

2023-01-06 15:00

关注

前言

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

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

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

RTMP 工作原理 ⭐

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

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

RTSP 工作原理 ⭐

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

3.FFmpeg

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

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

命令行实现:(和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())

总结

到此这篇关于Python进行ffmpeg推流和拉流rtsp、rtmp的文章就介绍到这了,更多相关Python ffmpeg推流和拉流rtsp rtmp内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯