相关文章推荐
听话的猴子  ·  C# ...·  11 月前    · 
善良的筷子  ·  Matlab-simulink仿真2ASK调 ...·  1 年前    · 
幸福的番茄  ·  mongodb C# exception ...·  1 年前    · 

流媒体协议,英文学名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())
                                    我将带领大家一起来亲手搭建“直播网站”,使用的技术包括:ffmpegpython、nginx。通过本课程的学习,学员将明白直播网站的原理和实践,加深对直播的理解。主要内容包括:1、搭建nginx直播网站:使用源码方式编译nginx和rtmp模块。2、搭建ffmpeg环境,使用rtmp格式进行直播推流。3、搭建videojs环境,使用网页方式进行直播拉流。
一. 基本概念及原理
1.1 ffmpeg简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
1.2  RTMP简介
RTMP协议,又称实时消息传输协议(Real Time Messaging Protocol),该协议基于TCP,是一个协议族行,用于实时数据通信的网络协议,主要用来在Flash/AIR平台和支
Python推流本质是调用FFmpeg推流进程,所以" pipe.stdin.write(img.tobytes()) "这句话报错时,可以考虑是FFmpeg没有配置的原因。
     推流术语…省略。
import cv2
# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
# 视频读取对象
cap = cv2.VideoCapture(".../xx.mp4") 
# 读取一帧
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
将文件bin目录路径添加到环境变量中,在cmd/终端中输入ffmpeg,出现以下内容说明已添加好
(windows)
                                    这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下python链接海康摄像头,并以弹出框的方式播放实时视频流,这种方式是以弹出框的形式播放。本地测试可以,实际业务场景不建议使用。可以采用rtsprtmp的方式@shared_taskdef parse_video(rtsp_address=No...
                                    import cv2
capture = cv2.VideoCapture('http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8')
while True:
    ret, frame = capture.read()
    # frame = cv2.flip(frame,1)   #镜像操作
    cv2.imshow("video", frame)
    key = cv2.waitKey(50)
    #print(key)
    if key  == ord
                                    在windows下用python + subprocess + ffmpeg实现推流,移植到树莓派后报错brokenpipeerror:[Error 32]Broken pipe 问题解决
                                    教程https://codingchaozhang.blog.csdn.net/article/details/102732555?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_...