添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

需要事先安装nginx并开启rtmp服务,然后

  1. read video from video use opencv
  2. write video to ffmpeg with pipe
python ffmpeg_rtmp.py from os import write import subprocess as sp import cv2 class ffmpeg_writer: def __init__(self,rtmpUrl,fps,width,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', '-flvflags', 'no_duration_filesize', rtmpUrl] self.pipe=sp.Popen(command, stdin=sp.PIPE) def write(self,frame): self.pipe.stdin.write(frame.tostring()) def release(self): self.pipe.terminate() if __name__ == '__main__': rtmpUrl = "rtmp://192.168.1.151:1935/live/av_stream" camera_path = "output.mp4" cap = cv2.VideoCapture(camera_path) # Get video information 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)) # 管道配置 writer=ffmpeg_writer(rtmpUrl,fps,width,height) # read webcamera while(cap.isOpened()): ret, frame = cap.read() if not ret: print("Opening camera is failed") break # process frame # your code # process frame # write to pipe writer.write(frame) writer.release() 参考https://zhuanlan.zhihu.com/p/103164153步骤需要事先安装nginx并开启rtmp服务,然后read video from video use opencvwrite video to ffmpeg with pipe"""python ffmpeg_rtmp.py"""from os import writeimport subprocess as spimport cv2 class ffmpeg_writer: def _
相信很多像我一样只要接触过 ffmpeg 的人,都会对这个强大的音视频库产生很大的兴趣,因为几乎所有的音视频处理都离不开 ffmpeg ,我们平时自己开发一些小软件时,也可能会用到它。 但是,我们会发现, ffmpeg 的使用也分几个层次,最开始的时候,我们完全是糊涂的,这个库怎么使用那么复杂,自己去编译一个android版或者windows版的 ffmpeg 库,可能折腾个好几天也没有一个好的输出结果。好不容...
Win10 Python +Nginx+ FFmpeg +Django2.2 搭建 RTMP 流媒体服务器并 实现 摄像头 rtmp 推流 并且在网页上显示 前言:最近在做一个人工智能项目,让我从摄像头读取视频流,然后经过神经网络的处理,从而将处理后的视频流推到HTML上显示。这里就整个 实现 过程做一个总结。本人是技术能力有限,如有错误之处,请谅解。 第一步:实验之前需要准备的东西有 Python Nginx(这里我们用到的是nginx 1.7.11.3 Gryphon)下载地址:nginx 1.7.11.3 Gryphon
最近在做一个校园安防的项目,其中涉及到前端要实时展示监控摄像机的画面,其中画面要求是经过神经网络处理过的画面。 如果前端只要求展示原始画面,只需要在接入摄像机的时候,把视频流推送到一个服务器地址上,前端可根据地址获取视频流, 本次开发,前端借助的是一个视频流插件video.js,可拉取 rtmp 格式的视频流。 如果接入多路的摄像头,可以借助服务器Nginx + ffmpeg ,具体的安装配置可参...
opencv 读取视频 —> 将视频分割为帧 —> 将每一帧进行需求加工后 —> 将此帧写入pipe管道 —> 利用 ffmpeg 进行 推流 直播 pipe管道: 啥是pipe管道? 粗略的理解就是一个放共享文件的地方(理解不是很深刻。。。) 利用这个特点 让 ffmpeg 读取处理后的图像帧并进行 rtmp 推流 即可
FFMPEG 读取实时音视频并编码 推流 //------------------------------------------------------------------------------------------------- 参考链接1、https://blog.csdn.net/leixiaohua1020/article/details/39702113 参考链接2、https:/...
[root@localhost ~]# yum install git unzip patch gcc gcc-c++ make [root@localhost ~]# git clone https://github.com/winlinvip/st-load.git [root@localhost
Python 推流 本质是调用 FFmpeg 推流 进程,所以" pipe.stdin.write(img.tobytes()) "这句话报错时,可以考虑是 FFmpeg 没有配置的原因。 推流 术语…省略。 import cv2 # subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。 import subprocess # 视频读取对象 cap = cv2.VideoCapture(".../xx.mp4") # 读取一帧
要在C++中 实现 Opencv FFmpeg 推流 RTMP ,需要使用 FFmpeg 的API和 Opencv 的VideoCapture类。 首先,需要初始化 FFmpeg 的网络库和注册所有的组件。可以使用如下代码: av_register_all(); avformat_network_init(); 然后,需要打开视频文件或者摄像头,并将其转换为 FFmpeg 的AVFormatContext结构体。可以使用如下代码: AVFormatContext *pFormatContext = nullptr; avformat_open_input(&pFormatContext, "video.mp4", nullptr, nullptr); if (avformat_find_stream_info(pFormatContext, nullptr) < 0) { // 处理错误 接下来,需要找到视频流和音频流的索引,并打开它们。可以使用如下代码: int videoStreamIndex = -1; int audioStreamIndex = -1; for (int i = 0; i < pFormatContext->nb_streams; i++) { AVStream *pStream = pFormatContext->streams[i]; if (pStream->codec->codec_type == AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; if (pStream->codec->codec_type == AVMEDIA_TYPE_AUDIO) { audioStreamIndex = i; AVCodecContext *pVideoCodecContext = pFormatContext->streams[videoStreamIndex]->codec; AVCodecContext *pAudioCodecContext = pFormatContext->streams[audioStreamIndex]->codec; AVCodec *pVideoCodec = avcodec_find_decoder(pVideoCodecContext->codec_id); AVCodec *pAudioCodec = avcodec_find_decoder(pAudioCodecContext->codec_id); if (pVideoCodec == nullptr || pAudioCodec == nullptr) { // 处理错误 if (avcodec_open2(pVideoCodecContext, pVideoCodec, nullptr) < 0 || avcodec_open2(pAudioCodecContext, pAudioCodec, nullptr) < 0) { // 处理错误 然后,需要创建一个 FFmpeg 的AVOutputFormat结构体来表示输出格式,并打开输出文件。可以使用如下代码: AVOutputFormat *pOutputFormat = av_guess_format("flv", nullptr, nullptr); AVFormatContext *pOutputContext = nullptr; if (avformat_alloc_output_context2(&pOutputContext, pOutputFormat, nullptr, " rtmp ://127.0.0.1/live/test") < 0) { // 处理错误 if (avio_open(&pOutputContext->pb, " rtmp ://127.0.0.1/live/test", AVIO_FLAG_WRITE) < 0) { // 处理错误 接着,需要创建视频流和音频流的AVStream结构体,并设置它们的编码器和参数。可以使用如下代码: AVStream *pVideoStream = avformat_new_stream(pOutputContext, pVideoCodec); AVStream *pAudioStream = avformat_new_stream(pOutputContext, pAudioCodec); // 设置编码器参数 avcodec_parameters_from_context(pVideoStream->codecpar, pVideoCodecContext); avcodec_parameters_from_context(pAudioStream->codecpar, pAudioCodecContext); 最后,需要循环读取视频帧和音频帧,并将它们写入输出流。可以使用如下代码: AVPacket packet; av_init_packet(&packet); while (av_read_frame(pFormatContext, &packet) >= 0) { if (packet.stream_index == videoStreamIndex) { // 处理视频帧 av_interleaved_write_frame(pOutputContext, &packet); if (packet.stream_index == audioStreamIndex) { // 处理音频帧 av_interleaved_write_frame(pOutputContext, &packet); av_packet_unref(&packet); 完整的代码示例可以参考[这里](https://github.com/charles-wangkai/ opencv - ffmpeg - rtmp )。