nginx rtmp + video.js + 摄像头rtsp流

利用docker搭建nginx rtmp流媒体服务器,将摄像头的rtsp视频流推送到流媒体服务器,在web页面用video.js播放。

Docker搭建nginx rtmp流媒体服务器

可以用docker hub上别人上传的镜像直接用,https://hub.docker.com/r/alfg/nginx-rtmp , 这个镜像的地址有详细说明。

docker pull alfg/nginx-rtmp
docker run -id -p 1935:1935 -p 8080:80 --name nginx-rtmp --rm alfg/nginx-rtmp

这个服务器的推流地址

rtmp://localhost:1935/stream/hello

拉流地址是

http://localhost:8080/live/hello.m3u8

上面地址的 ‘hello’可以自定义

我们可以尝试用obs推流

image.png
image.png

然后就可以用VLC播放了

video.js播放



  
    
    demo
    
  

  
    
  
  



在Vue项目中使用,也是用video.js,在github上有个 https://github.com/surmon-china/vue-video-player适用于 Vue 的播放器组件
,就是在vue中集成video.js。

在vue单页面应用中使用:

先 npm install vue-video-player --save

然后




代码自由编写调整。

C#程序推流

推流可以用obs,好像很多直播网站就是用这个推流的,
但是现在的场景不同,需要在后台把摄像头的rtsp流推到服务器,就用ffmpeg,因为ffmpeg太强大了。

找了很久没有找到合适的.Net Core 平台的ffmpeg库,由于程序运行在windows(摄像头的服务器在windows上,而且这台服务器rtsp流只能在内网访问,很累),目前不需要跨平台,
那就直接通过C#的Process类直接调用ffmpeg.exe来推流。

写个控制台程序:

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using ffmpeg_demo.Test;

namespace ffmpeg_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            string fromRTSP = "rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0";

            string toRTMP = "rtmp://localhost:1935/stream/hello";

            ProcessStartInfo processStartInfo = new ProcessStartInfo();

            // 把ffmpeg.exe放在了项目根目录下,通过Directory.GetCurrentDirectory()直接获取到地址
            processStartInfo.FileName = Directory.GetCurrentDirectory() + @"\ffmpeg.exe";
            processStartInfo.Arguments = " -i " + fromRTSP + " -f flv -an " + toRTMP;
            processStartInfo.CreateNoWindow = false;


            Process process = new Process();
            process.StartInfo = processStartInfo;
            process.Start();
            Console.WriteLine("进程名称:" + process.ProcessName);
        }
    }
}


你可能感兴趣的:(nginx rtmp + video.js + 摄像头rtsp流)