精华内容
下载资源
问答
  • python利用ffmpeg进行rtmp推流直播

    万次阅读 多人点赞 2019-07-04 23:44:06
    利用ffmpeg进行推流直播 pipe管道: 啥是pipe管道? 粗略的理解就是一个放共享文件的地方(理解不是很深刻。。。) 利用这个特点 让ffmpeg读取处理后的图像帧并进行rtmp推流即可 代码 ...
    思路:

    opencv读取视频 —> 将视频分割为帧 —> 将每一帧进行需求加工后 —> 将此帧写入pipe管道 —> 利用ffmpeg进行推流直播

    pipe管道:

    啥是pipe管道? 粗略的理解就是一个放共享文件的地方(理解不是很深刻。。。)
    利用这个特点, 把处理后的图片放入管道, 让ffmpeg读取处理后的图像帧并进行rtmp推流即可

    代码
    import subprocess as sp
    
    rtmpUrl = ""
    camera_path = ""
    cap = cv.VideoCapture(camera_path)
    
    # Get video information
    fps = int(cap.get(cv.CAP_PROP_FPS))
    width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv.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)
            
    # 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
        p.stdin.write(frame.tostring())
    
    
    代码说明:
    1. rtmpUrl就是要接收视频的服务器了, 我做实验时是在自己机子上配置了一个nginx服务器接收视频流(ubuntu 不要通过apt安装哦, 请从源码安装, 因为apt安装的版本没有rtmp协议, 需要下载nginx源码然后配合nginx-rtmp-module这个东西安装 推荐一篇nginx安装教程)
    2. camera_path就是要进行直播的视频地址了
    3. 重点的代码其实就这几句:
    import subprocess as sp
    
    # 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)
    
    # write to pipe
    p.stdin.write(frame.tostring())
    
    1. 我读取的视频是rtsp网络摄像头的视频流, 但是一旦运行没多久就会出现 pipe broke 的报错(1080p视频), 不知道是什么原因, 若有大神还请指点指点
    WriteN, RTMP send error 104 (129 bytes)
    

    更新: 我改1080p为720p 暂时没出现这个问题

    1. 我在读取视频时候还遇到这个报错
    error while decoding xxx
    

    在这里插入图片描述
    经过一方百度, 是“FFMPEG Lib对在rtsp协议中的H264 vidos不支持”的问题, 解决方法: 程序开启两个线程, 一个线程读取摄像头的帧, 另一个线程处理这帧图片, 这里还推荐一个大佬用队列处理视频的方法 ,大家可以套用一下啊 飞机票 多线程处理的版本

    import queue
    import threading
    import cv2 as cv
    import subprocess as sp
    
    class Live(object):
        def __init__(self):
            self.frame_queue = queue.Queue()
            self.command = ""
            # 自行设置
            self.rtmpUrl = ""
            self.camera_path = ""
            
        def read_frame(self):
            print("开启推流")
            cap = cv.VideoCapture(self.camera_path)
    
            # Get video information
            fps = int(cap.get(cv.CAP_PROP_FPS))
            width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
            height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
    
            # ffmpeg command
            self.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', 
                    self.rtmpUrl]
            
            # read webcamera
            while(cap.isOpened()):
                ret, frame = cap.read()
                if not ret:
                    print("Opening camera is failed")
                    # 说实话这里的break应该替换为:
                    # cap = cv.VideoCapture(self.camera_path)
                    # 因为我这俩天遇到的项目里出现断流的毛病
                    # 特别是拉取rtmp流的时候!!!!
                    break
    
                # put frame into queue
                self.frame_queue.put(frame)
    
        def push_frame(self):
            # 防止多线程时 command 未被设置
            while True:
                if len(self.command) > 0:
                    # 管道配置
                    p = sp.Popen(self.command, stdin=sp.PIPE)
                    break
    
            while True:
                if self.frame_queue.empty() != True:
                    frame = self.frame_queue.get()
                    # process frame
                    # 你处理图片的代码
                    # write to pipe
                    p.stdin.write(frame.tostring())
                    
        def run(self):
            threads = [
                threading.Thread(target=Live.read_frame, args=(self,)),
                threading.Thread(target=Live.push_frame, args=(self,))
            ]
            [thread.setDaemon(True) for thread in threads]
            [thread.start() for thread in threads]
    
    
    1. 感谢这篇博文提供了新的知识

    博主忙着做项目ing 能力也不是很高 欢迎和大家一起讨论 但是有的是真不会呀 还请见谅

    展开全文
  • ffmpeg本地文件udp推流命令

    千次阅读 2020-04-08 18:32:00
    mp4udp ffmpeg -re -i 1.mp4 -vcodec h264 -acodec aac -pkt_size 1316 -f mpegts udp://127.0.0.1:1234 用vlc可以播放 udp://@:1234

            mp4推udp

            ffmpeg -re -i 1.mp4 -vcodec h264 -acodec aac -pkt_size 1316 -f mpegts udp://127.0.0.1:1234

            用vlc可以播放 udp://@:1234

     

    展开全文
  • 基于FFmpeg文件流推送到服务器 特征 可以读取文件或 rtsp/ts 作为输入。 使用 cmake 进行跨平台构建。 依赖关系 libav格式 libavcodec libavutil 建造 ./start_build.sh 构建目标位于 build/ffmpeg_push ...
  •      FFmpeg —— Linux下进行配置      FFmpeg —— 简介      FFmpeg —— Linux下进行配置      FFmpeg —— 工具指令介绍      FFmpeg —— 常用工具命令      FFmpeg —— ...
    UDP推流本地文件(代码实现)

         将本地媒体文件进行打开处理封装后通过UDP组播进行推流。


    预览


    视频来源


    部分代码
    	av_register_all();
        avformat_network_init();
        
        char *inUrl 
    展开全文
  • // rtsp推流 /opt/srs/srs2 ./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4/1.mp4 -vcodec copy -codec copy -f rtsp rtsp://192.168.2.161/live/rtsp_test ...// rtmp 推流./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4...

    // rtsp推流  /opt/srs/srs2

    ./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4/1.mp4 -vcodec copy -codec copy -f rtsp rtsp://192.168.2.161/live/rtsp_test

    // rtmp 推流
    ./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4/1.flv -vcodec copy -codec copy -f flv rtmp://192.168.2.161/live/rtsp_test

    // rtsp推流  /opt/srs/srs2
    ./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4/1.mp4 -vcodec copy -codec copy -f rtsp rtsp://192.168.2.161/live/rtsp_test
    // rtmp 推流./objs/ffmpeg/bin/ffmpeg -re -i /root/mp4/1.flv -vcodec copy -codec copy -f flv rtmp://192.168.2.161/live/rtsp_test

     

    转载于:https://www.cnblogs.com/dwj192/p/7068314.html

    展开全文
  • 流媒体服务器的搭建,可以参考这篇文章 centos7+nginx+rtmp+ffmpeg搭建流媒体服务器 基于命令行的方式推流可以参考这篇文章 FFmpeg —— 屏幕录像和录音并推流(命令行的方式) 本篇是基于代码的方式来实现的。 推流...
  • FFmpeg4Android:视频文件推流到nginx服务器(源码) RTMP推流器(Streamer)的在流媒体系统中的作用可以用下图表示。首先将视频数据以RTMP的形式发送到流媒体服务器端(Server,比如FMS,Red5,Wowza等),然后...
  • 使用FFMpeg实现实时推流功能

    千次阅读 2020-07-19 17:45:18
    要实现该功能,我建议先熟悉一下通过FFMpeg实现本地文件推流功能, 地址见:最简单的基于FFMpeg 的推流功能 本文主要为改装成实时流推流功能提供思路。 推流操作从乎用户层面可简单分为以下几个步骤: 1.开始推流 2....
  • 基于FFMPEG的RTP推流H264和AAC文件

    千次阅读 2017-04-26 20:17:36
    在本文中主要讲如何用FFMPEG编写RTP的推流程序和打视音频时间戳上的问题 PS:文中代码基于LINUX一. 文件的打开和输出流的打开用avformat_open_input分别打开视音频文件,用avformat_alloc_output_context2打开输出...
  • ffmpeg rtmp推流源码

    2019-08-07 09:34:03
    一份可以直接将本地视频推送到服务器的推流源代码, 是学习推流的很好的资料, 代码基于ffmpeg rtmp推流, 采用nginx+rtmp module搭建本地流媒体服务器
  • 利用ffmpeg实现rtmp推流

    千次阅读 2019-07-23 11:31:19
    https://www.jianshu.com/p/c141fc7881e7 ffmpeg 常见命令功能: 查看电脑设备: ffmpeg -list_devices true -f dshow -i dummy 测试摄像头是否可用: ffplay -f dshow -i video="USB2.0 PC CAMERA" USB2...
  • C# 利用ffmpeg进行推流

    2021-04-12 15:00:24
    C# 利用ffmpeg进行推流推流方式涉及:读取本地文件,以入读取指定内存数据;示例项目中使用开源项目 FFmpeg.AutoGen,其对ffmpeg的API做了封装,方便在C#代码中进行ffmpeg API的调用。
  • ffmpeg命令行循环推流

    千次阅读 2017-09-28 17:08:00
    ffmpeg循环推一个文件到rtmp服务器。一般都是建议用-stream_loop选项。如: ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i "H:\video.mp4" -c copy -f flv rtmp://10.100.1.4:1935...而且是推流到...
  • FFmpeg —— 屏幕录像和录音并推流(命令行的方式) 本篇是基于代码的方式来实现的。 屏幕录像并推流 #include <stdio.h> #define __STDC_CONSTANT_MACROS extern "C" { #include "libavcodec/avcodec.h...
  • 一.安装ffmpeg 参考我转载的文件:linux安装并配置ffmpeg 二.搭建rtmp推流环境 1.
  • ffmpeg推流视频文件 nginx+rtmp服务器
  • ffmpeg+nginx推流

    2018-04-11 14:13:14
    参考博文 https://www.cnblogs.com/wanggang123/p/6056700.html ... 在学习hls+nginx的过程中,需要用到ffmeg对源解封装处理,有必要学习ffmpeg.exe是使用 ffmpeg.exe...
  • ffmpeg视频推流

    2018-02-23 17:08:53
    ffmpeg视频推流,里面用map封装好了,只需要填相应的视频流地址以及需要ffmpeg名字就可以用
  • FFmpeg —— 屏幕录像和录音并推流(命令行的方式) 本篇是基于代码的方式来实现的。 读取摄像头数据并推流 #include <stdio.h> #define __STDC_CONSTANT_MACROS extern "C" { #include "libavcodec/...
  • FFmpeg读取视频文件rtmp推流

    千次阅读 2019-02-28 20:24:31
    前一阵,研究了怎么用ffmpeg读取USB摄像头进行rtmp推流,这次也把读取视频文件推流的示例也搬上来。当然了本篇肯定也参考了雷神的博客,再次致敬! 本篇比读取USB摄像头的H264帧要简单,而且视频文件中含有音频,推...
  • 流媒体服务器接管了和用户交互的一部分操作,后端通过ffmpeg推流到流媒体服务器 smart-rtmp地址:https://gitee.com/mirrors/smart_rtmpd?_from=gitee_search 修改每个协议对应的配置后,启动smart rtmpd ffmpeg...
  • FFMPEG采集摄像头推流方法说明

    千次阅读 2019-08-01 21:00:39
    命令 ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称 ffmpeg -f dshow -i video="获取的摄像头的名称" -vcodec libx264 -acodec copy -preset:v ...推流地址> #获取视频流并推流 样例 ...
  • 本文记录一个最简单的基于FFmpeg推流器。推流器的作用就是将本地的视频数据推送至流媒体服务器。本文记录的推流器,可以将本地的 MOV / AVI / MKV / MP4 / FLV 等格式的媒体文件,通过流媒体协议(例如RTMP,HTTP...
  • ffmpeg代码:推流降低延迟的优化

    千次阅读 2019-03-20 14:22:21
    ffmpeg推流降低延迟的优化 一.针对编码器上下文的参数配置 AVCodecContext *vc = NULL; // AV_CODEC_FLAG_GLOBAL_HEADER -- 将全局头文件放在引渡文件中,而不是每个关键帧中。 //AV_CODEC_FLAG_LOW_DELAY --...
  • 为什么使用指令的时候,可以正常拉流播放, 在不加-c copy时, ffmpeg库内部做了哪些处理, 我仿照雷博主的这个推流代码应该怎么去改进,才能让他兼容更的音频格式? 我想法就是: 是不是将输入的文件进行解码后重定向再...
  • node-media-server+ffmpeg实现视频推流 node-media-server+ffmpeg实现视频推流 node-media-server安装与使用 使用npm安装:npm install node-media-server -g 新建js文件,复制以下代码 const NodeMediaServer = ...
  • 使用ffmpeg实现rtmp推流

    千次阅读 2019-08-24 15:15:37
    服务器用的是ngix+rtmp,配置方式见博客: ... 由于我是在本机配置的ngix服务器,所以host是127.0.0.1,如果用的虚拟机,就是虚拟机的ip地址。 路径中的rtmplive是ngix配置文件...代码涉及一些ffmpeg的知识点,这里列一...
  • ffmpeg C++推流

    千次阅读 2018-11-09 15:59:58
    ffmpeg 推流器代码如下: #include &lt;iostream&gt; using namespace std; //引入头文件 extern "C" { #include "libavformat/avformat.h" //引入时间 #include "libavutil/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,545
精华内容 3,018
关键字:

ffmpeg多文件推流