------------python算法处理后再进行推流-------------------------------
1、先搭建流媒体服务器
方式一:见Windows+nginx+rtmp+OBS文档,或用linux+nginx+rtmp
方式二:见SRS4.0.85流媒体服务器搭建
2、安装ffmpeg并添加到环境变量(以windows为例)
Download FFmpeg
将文件bin目录路径添加到环境变量中,在cmd/终端中输入ffmpeg,出现以下内容说明已添加好
(windows)
(linux)
3、python通过管道控制ffmpeg推流
经过无数次配置命令行验证,目前以下两种有效。目前经测试,使用ffmpeg推流命令复杂且视频画面不稳,容易出现各种各样问题,没有OBS好使
import subprocess as sp
import cv2
rtmpUrl = 'rtmp://192.168.3.39:1935/live/livestream'
#下面这个可以通过srs服务器推webRTC流
command = ['ffmpeg',
'-y', '-an',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', '1280x720',
'-r', '25',
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-flvflags', 'no_duration_filesize',
'-f', 'flv',
rtmpUrl]
#这个可通过nginx+rtmp服务器推流
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "1280x720",
'-i', '-',
'-c:v', 'libx264',
'-preset', 'faster',
'-f', 'flv',
rtmpUrl]
# 下面这个可以通过srs推流webRTC
command = ['ffmpeg',
'-re',
'-i', rtmp_url,
'-vcodec', 'copy',
'-acodec', 'copy',
'-f','flv',
'-flvflags','no_duration_filesize',
rtmpUrl]
pipe = sp.Popen(command,stdin=sp.PIPE)
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
pipe.stdin.write(frame.tostring())
else:
break
cap.release()
pipe.terminate()
---------------ffmpeg推流本系统usb摄像头直接命令--------------
引用博客:
地址
1、Linux
1、ls -ltrh /dev/video* #获取摄像头名称
Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务
ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 -i /dev/video0 -f alsa -i hw:1 -ab 16 -ar 22050 -ac 1 -f mp3 -f flv rtmp://127.0.0.1/rtmpsvr/rtmp1
./ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/live
首先说一下推流,主要使用ffmpeg命令进行本地摄像头的推流,为了实现首屏秒开使用-g设置gop大小,同时使用-b降低网络负载,保证流畅度。
2、ffmpeg -r 30 -i /dev/video0 -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/test1
2、windows
1、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 rtmp://116.xxx.xxx.xxx:1935/ros/ros_video
ffmpeg -r 30 -f vfwcap -i 0 -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/test1
ffmpeg -r 30 -f dshow -i video="1.3M HD WebCam" -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/tes
我将带领大家一起来亲手搭建“直播网站”,使用的技术包括:ffmpeg、python、nginx。通过本课程的学习,学员将明白直播网站的原理和实践,加深对直播的理解。主要内容包括:1、搭建nginx直播网站:使用源码方式编译nginx和rtmp模块。2、搭建ffmpeg环境,使用rtmp格式进行直播推流。3、搭建videojs环境,使用网页方式进行直播拉流。
python使用ffmpeg接口,需要本地单独安装ffmpeg;之后安装python-ffmpeg很多网友没有预先安装ffmpeg,仅安装了 python-ffmpeg,导致调用失败。
一. 基本概念及原理
1.1 ffmpeg简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
1.2 RTMP简介
RTMP协议,又称实时消息传输协议(Real Time Messaging Protocol),该协议基于TCP,是一个协议族行,用于实时数据通信的网络协议,主要用来在Flash/AIR平台和支
vcodec libx264 注意下视频的编码设置,不然会过不去。可以看到我这台100.196没有视频的接口,只有一个耳机录入。播放时可以看到下面的音频的“痕迹”输入下面的语句即可列出电脑的设备。看我的笔记 本,就都有。
Python推流本质是调用FFmpeg的推流进程,所以" pipe.stdin.write(img.tobytes()) "这句话报错时,可以考虑是FFmpeg没有配置的原因。
推流术语…省略。
import cv2
# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
# 视频读取对象
cap = cv2.VideoCapture(".../xx.mp4")
# 读取一帧
教程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_...
# ffmpeg 推流和播放命令本文总结了 ffmpeg 在流媒体业务中的应用,整理了常见的推流(发布视频直播内容到流媒体服务器)和播放(终端用户播放流媒体服务器上的视频)的命令。推流和播放都可以使用多种传输协议。# rtmp# 推流ffmpeg -re -i sample.mp4 -c copy -f flv rtmp://125.208.28.177/liveshow/live1# 播放ffp...
首先的话,我想写感谢一个带我进入音视频处理领域的人,虽然从未谋面,但是是他的博客指引了我学习音视频开发的道路,启蒙了一个曾经迷茫的程序员。但是很可惜,他已经在2016年不幸离开了我们,他是雷霄骅,一位乐于分享的传媒大学大佬。我相信有很多初次接触ffmpeg的人都是从他的博客起步的。我想写这个音视频学习的系列,很大一部分也是觉得应该将大佬分享的精神继承下去,这应该是我认为对他最好的缅怀了....
先展示一下效果:
ps:这里推流的代码也是学习自雷大的最简单的Android推流器
解析...
程序的流程如下图所示。然后分别调用视频输入流和音频输入流的av_read_frame(),从视频输入流中取出视频的AVPacket,音频输入流中取出音频的AVPacket,分别将取出的AVPacket写入到输出文件中即可。(5)这里有个问题就是 视频中 30ms 到40ms 这中间的10ms是怎么算出来的,这个是不用关心的,因为人的眼睛10ms是看不出来的,下面和回调方式一样,见回调方式(4)(5)。为什么不 音频播音频的 视频播视频的 即上面的 到 第22.32ms播一帧音频 ,到40ms播一帧视频。
moov 是一个 container box,一个文件只有一个,其包含的所有 box 用于描述媒体信息。moov 的位置可以紧随着 ftyp 出现,也可以出现在文件末尾. 由于是一个 container box,所以除了 box header,其 box body 就是其它的 box。stbl box 是一个 container box,是整个 track 中最重要的一个 box,其子 box 描述了该路媒体流的解码相关信息、音视频位置信息、时间戳信息等。box 分为普通 box 和 fullbox。