ffmpeg推流,vlc拉流教程
win搭建rtmp服务器教程:https://blog.csdn.net/BigHorse110/article/details/119538683
rtmp服务app:https://github.com/aler9/rtsp-simple-server
ffmpeg指令教程:https://blog.csdn.net/zqf_office/article/details/56309412
ffmpeg超详细指令教程https://www.toutiao.com/article/7101556759998857768/?wid=1656052183280
ffmpeg参数详解:https://blog.csdn.net/fanyun_01/article/details/103299866
ffmpeg指令教程2:https://wenku.baidu.com/view/6667fd0a2c60ddccda38376baf1ffc4ffe47e231.html
PYTHON实现推流直播:https://www.freesion.com/article/3564625851/
列出所有 -f 参数的格式
ffmpeg -formats
# 电脑摄像头支持的格式是sln(Asterisk raw pcm,摄像头输出格式是pcm)
推流摄像头
ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称
ffmpeg -f dshow -i video="获取的摄像头的名称" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv <推流地址> #获取视频流并推流
ffmpeg -hwaccel cuda -f dshow -i video="Microsoft LifeCam Studio(TM)" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -max_delay 100 -g 2 -s 640*480 -r 30 -b:v 3500k -rtsp_transport tcp -f rtsp rtsp://192.168.1.50:8554/live
ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://192.168.1.50:8554/test
python代码实现:
import cv2
# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
# 视频读取对象
cap = cv2.VideoCapture(0)
# 读取一帧
ret, frame = cap.read()
# 推流地址
rtmp = "rtmp://127.0.0.1:1935/live/stream"
"""ffmpeg -re -i F:/badapple.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/stream"""
# 推流参数
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', '720*560', # 根据输入视频尺寸填写
'-r', '25',
'-i', '-',
'-c:v', 'h264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
rtmp]
# 创建、管理子进程
pipe = subprocess.Popen(command, stdin=subprocess.PIPE)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 循环读取
while cap.isOpened():
# 读取一帧
ret, frame = cap.read()
if frame is None:
print('read frame err!')
continue
# 显示一帧
cv2.imshow("frame", frame)
# 按键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 读取尺寸、推流
img = cv2.resize(frame, size)
pipe.stdin.write(img.tobytes())
# 关闭窗口
cv2.destroyAllWindows()
# 停止读取
cap.release()
# 摄像头实时推流
import cv2
# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
import pyaudio
# 视频读取对象
cap = cv2.VideoCapture(0)
# 推流地址
rtmp = "rtsp://192.168.1.50:8554/live" # 推流的服务器地址
# 设置推流的参数
command = ['ffmpeg',
"-hwaccel", "cuda", # 显示可用的硬件加速方法
'-y', # 覆盖已有文件。
'-f', 'rawvideo', # 指定格式(音频或者视频格式)
'-vcodec', 'rawvideo', # 强制使用codec编解码方式('copy'代表不进行重新编码)
'-pix_fmt', 'bgr24', # 显示可用的像素格式
'-s', '640*480', # 指定分辨率,根据输入视频尺寸填写
'-r',