基于ffmpeg+nginx+UscreenCapture的局域网直播系统搭建「建议收藏」

基于ffmpeg+nginx+UscreenCapture的局域网直播系统搭建「建议收藏」基于ffmpeg+nginx+UscreenCapture的局域网直播系统搭建

大家好,又见面了,我是你们的朋友全栈君。

本文的创作灵感是由Windows screen recording with FFmpeg UScreenCapture and NGINX RTMP module而来,笔者建议大家可以先去原文看一下大致的内容,但需要一定的英文阅读能力,本文并不是照搬翻译,而是根据原文成功搭建直播系统的基础上增加了服务器录制和本地录制的内容:

系统环境:

Windows 7 Service Pack 1 64bit

软件准备:

ffmpeg:这里笔者使用原文的地址下载了官方打包好的可执行文件

nginx:这里笔者使用原文的地址下载了编译好nginx rtmp module的打包文件

UScreenCapture(x64):请参看原文下载地址

QtAv:笔者在二次开发时选择的库 (可选)

vlc-qt:基于vlc的库(可选),笔者一开始做本地录制功能的时候选择了这个库,但是在尝试本地播放视频同时录制的时候,发现开始录制后没有停止录制的接口,于是就放弃了

libvlc:vlc官方的开源组件,可供其他开发平台调用(可选),上面的vlc-qt是基于Qt开发环境的,如果不依赖Qt可以尝试用这个库,不过需要看一下官方的开发文档,笔者并没有相关开发经验,就不做过多介绍了

产品需求:

将某台PC的桌面作为视频直播源,推送至直播服务器,可供局域网内的其他PC通过视频播放器观看,观看直播的同时可以随时开始/停止录制当前的播放内容

开发步骤:

安装UScreenCapture(x64),后续作为可用视频输入源供ffmpeg使用

点击下载好的nginx目录中的nginx.exe,启动nginx服务器,根据conf文件夹中的nginx.conf配置,此时服务器会监听81-web端口和1935-rtmp端口

打开命令提示符(cmd),输入以下命令,此命令用于确认是否正确安装并ffmpeg可以识别UscreenCapture作为视频流输入源:

[这里是ffmpeg文件夹的绝对路径]/ffmpeg.exe -list_devices true -f dshow -i dummy

[这里是ffmpeg文件夹的绝对路径]/ffmpeg -f dshow -i video="UScreenCapture" -preset ultrafast -f flv rtmp://127.0.0.1/view/test

上述代码的作用就是,以UScreenCapture作为输入源,编码速率设定为ultrafast,编码格式为flv,将视频媒体流推送到rtmp://127.0.0.1/view/test这个地址上

当然,其中输入源可以选择摄像头,本地视频文件等;编码速率,格式以及推送地址都可以根据需要进行配置,最终的目的都是为了把本地源推送至服务器以供远程播放器使用

测试直播是否正常可以使用ffmpeg文件夹中的ffplay rtmp://127.0.0.1/view/test, 也可以使用其他播放器,如vlc player

如果需要录制视频功能,可以选择以下两种方案,录制后的文件各自保存的位置不同

  1. 播放端录制

    使用QtAv的VideoDecoder+VideoEncoder+AVMuxer+AVDemuxer,将播放源进行编解码后保存到本地,因为官方没有正式的例子,下文的代码仅供演示使用(代码整理中,后续尽快添加)

    To Be Continued。。。

  2. 服务器端录制
    利用nginx rtmp module的rtmp_control功能,通过HTTP协议在服务器端进行开始录制及停止录制操作,nginx端的配置见下文
server {
    ......
    location /control {
        rtmp_control all;
    }
}

rtmp {
        server {
             listen 1935;
            application view {下面的录制命令app参数会用到这个配置名 
                    live on;
                    recorder NAME_THIS_WHAT_YOU_WANT { # 下面的录制命令rec参数会用到这个配置名                           
                        record all manual;
                        record_suffix -%Y-%m-%d-%H%M.mp4;
                        record_path C:\\nginx\\recordings;
                        record_unique on;
                    }
              }
        }
}

rtmp://127.0.0.1/view/test,其中view是服务器配置的rtmp服务名,test是自定义的视频流名称

启动录制:http://localhost:81/control/record/start?app=view&name=自定义的视频流名称&rec=NAME_THIS_WHAT_YOU_WANT

停止录制:http://localhost:81/control/record/stop?app=view&name=自定义的视频流名称&rec=NAME_THIS_WHAT_YOU_WANT

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107021.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • POSIT算法的原理–opencv 3D姿态估计[通俗易懂]

    POSIT算法的原理–opencv 3D姿态估计[通俗易懂]3D姿态估计-POSIT算法 POSIT算法,PosefromOrthographyandScalingwithIterations, 比例正交投影迭代变换算法:用于估计物体的3D姿态(相对于镜头的平移和旋转量)。算法正常工作的前提是物体在Z轴方向的“厚度”远小于其在Z轴方向的平均深度,比如距离镜头10米远的一张椅子。 算法流程:假设待求的姿态,包括旋转矩阵R和

    2022年10月23日
  • 2021pycharm激活码【注册码】

    2021pycharm激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 数据结构的堆排序_数据结构冒泡排序算法

    数据结构的堆排序_数据结构冒泡排序算法一、什么是堆排序1.堆,堆排序对于“堆”我们可以理解为具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆堆

  • IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的[通俗易懂]

    IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的[通俗易懂]IP地址类型最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。A类IP地址一个A类IP地址由1…

  • java集合框架05——ArrayList和LinkedList的区别

    java集合框架05——ArrayList和LinkedList的区别前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容。List概括先来回顾一下List在Collection中的的框架图:从图中我们可以看出:1.List是一个接口,它继承与Collection接口,代表有序的队列。2.AbstractList是一个抽象类,它继承与AbstractColle

  • Perl正则表达式讲解,真的非常详细

    Perl正则表达式讲解,真的非常详细 

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号