当前位置:主页 > python教程 > Python ffmpeg推流和拉流rtsp rtmp

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

发布:2023-03-02 15:00:01 59


给寻找编程代码教程的朋友们精选了相关的编程文章,网友暨煜祺根据主题投稿了本篇教程内容,涉及到ffmpeg、拉流、推流、代码、python、ffmpeg推流、ffmpeg推送rtmp流、Python ffmpeg推流和拉流rtsp rtmp相关内容,已被609网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

Python ffmpeg推流和拉流rtsp rtmp

前言

流媒体协议,英文学名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 工作原理 ⭐

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

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

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

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

RTSP 工作原理 ⭐

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

由于 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())

总结

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


相关文章

  • Python实现从网络摄像头拉流的方法分享

    发布:2023-03-12

    这篇文章主要为大家详细介绍了Python实现从网络摄像头拉流的几种方法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下


  • C语言 ffmpeg与sdl实现播放视频同时同步时钟详解

    发布:2023-03-02

    使用ffmpeg和sdl实现播放视频后,需要再实现时钟同步才能正常的播放视频,尤其是有音频的情况,我们通常需要将视频同步到音频来确保音画同步


  • python+ffmpeg对视频并发直播进行压力测试

    发布:2021-05-25

    这篇文章主要为大家详细介绍了python+ffmpeg视频并发直播压力测试,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • FFmpeg进阶教程之给视频添加文字水印

    发布:2023-03-09

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,下面这篇文章主要给大家介绍了关于FFmpeg进阶教程之给视频添加文字水印的相关资料,需要的朋友可以参考下


  • python利用ffmpeg进行录制屏幕的方法

    发布:2022-07-12

    为网友们分享了关于python的教程,今天小编就为大家分享一篇python利用ffmpeg进行录制屏幕的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Java使用ffmpeg和mencoder实现视频转码

    发布:2022-08-01

    为网友们分享了关于Java的教程,这篇文章主要为大家详细介绍了Java使用ffmpeg和mencoder实现视频转码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Mac上Python使用ffmpeg完美解决方案(避坑必看!)

    发布:2023-04-14

    ffmpeg是一个强大的开源命令行多媒体处理工具,下面这篇文章主要给大家介绍了关于Mac上Python使用ffmpeg完美解决方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


网友讨论