流媒体协议,英文学名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())

Python进行ffmpeg推流和拉流rtsp、rtmp相关推荐

  1. JavaCV开发详解之3:通用拉流器实现,从流媒体服务器拉流rtsp/rtmp录制成视频文件

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  2. 通过Nginx实现直播软件源码的推流和拉流

    推流和拉流是直播软件源码实现直播的重要步骤,今天我们分析一下如何通过Nginx实现直播软件源码的推拉流. ​ 理论介绍 1.RMTP, Real Time Messaging Protocol 实时消 ...

  3. windows下ffmpeg+nginx-rtmp环境搭建及opencv+ffmpeg+python实现拉流和rtmp直播推流

    由于工作需要最近在研究rtsp拉流与直播推流的问题,目前先在我本机上进行了实验,本博客记录学习的内容,包含windows下ffmpeg.nginx-rtmp环境搭建及opencv+ffmpeg+pyt ...

  4. windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流

    windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流 推流和拉流的概念 以及RTMP协议 在直播中,一般需要三个角色:主播,服务器,用户.主播通过推流将数据推到服务器上,而用户可 ...

  5. RTSP向ZLM流媒体服务器的推流和拉流鉴权

    文章目录 前言 一.HTTP Hook 二.向ZLM推流鉴权 三.向ZLM拉流 四.参考 前言 本篇博客的测试环境: Windows 10 + Qt 5.12.2 MSVC. 由于项目中使用了RTSP ...

  6. Centos7下SRS流式服务器搭建、推流、拉流

    Centos7下SRS流式服务器搭建.推流.拉流 1. 设计目的 2. 实验内容 3. 实验过程 1. 设计目的 本报告从SRS服务器的部署入手,分析视频摄像头RTSP流媒体协议向RTMP流媒体协议的 ...

  7. 推流和拉流的概念以及RTMP和HLS协议

    https://www.bbsmax.com/A/x9J2wZM56o/ 推流为将直播内容推送至服务器的过程:拉流为服务器已有直播内容,用指定地址进行拉取的过程. rtmp rtmp是Real Tim ...

  8. 音视频流媒体-推流与拉流简介

    一.概念 话不多说,先了解概念,再看示意图更直观: 1.1 推流 推流:将直播的内容推送至服务器的过程.即指的是把采集阶段封包好的内容传输到服务器的过程.其实就是将现场的视频信号传到网络的过程.&qu ...

  9. 关于直播类app中的推流、拉流技术(转载)

    关于直播类app中的推流.拉流技术 from:https://blog.csdn.net/lzllzllhl/article/details/80249069 图像处理:iOS端一般会用到GPUIma ...

最新文章

  1. 使用命名管道的OVERLAPPED方式实现非阻塞模式编程 .
  2. C++迪杰斯特拉算法求最短路径
  3. Linux脚本实战之检测网卡流量
  4. JavaScript工具库之Lodash
  5. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
  6. python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...
  7. php梯度区间计算,快速计算梯度的魔法--反向传播算法
  8. windows虚拟显示器开发(三)USB显示器
  9. 打乱数组 matlab,matlab对数组前N个数求和
  10. 苹果退款_这里有颗“后悔药”:苹果App Store退款流程
  11. 高数下-空间几何(一)-向量
  12. android透明功能引导页,Android 利用PagerView做引导页
  13. scala中deMd5加密
  14. AndroidStudio音乐播放器进度条和歌曲时间的操作
  15. 数据库MySQL备份命令,手动备份MySQL数据库
  16. CentOS-7挂载iscsi网络存储
  17. 计算机基础知识问卷,大学计算机基础课程教学内容的调查分析
  18. signer information does not match问题解决
  19. Vuex实现城市选择功能
  20. GitHub仓库的常用功能

热门文章

  1. win7 万能驱动 win8 万能驱动
  2. 4k视频分辨率的码流_视频的分辨率、码率、帧率你都了解吗,如何设置才更好?...
  3. python 获取当前时间字符串
  4. 关于学习密码学知识的一些基础知识( trapdoor function)
  5. kafka版本兼容问题随笔
  6. springboot接口返回数据类型解析问题
  7. python解析C/C++结构体二进制数据
  8. 1190PHP,KTM 1190 ADVENTURE 一览
  9. 简单理解vuex原理
  10. python弹幕点歌_直播续章:用树莓派搭建B站直播“点歌台”