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播放

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <title>demo</title>
    <link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet" />
  </head>

  <body>
    <video
      id="myVideo"
      class="video-js vjs-default-skin vjs-big-play-centered"
      controls
      autoplay
      muted
      preload="auto"
      width="1080"
      height="708"
      data-setup="{}"
    >
      <source
        id="source"
        src="http://localhost:8080/live/hello.m3u8"
        type="application/x-mpegURL"
      />
    </video>
  </body>
  <script src="https://vjs.zencdn.net/7.4.1/video.js"></script>
</html>


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

在vue单页面应用中使用:

先 npm install vue-video-player --save

然后

<template>
  <div id="video_player_demo">
    <video-player class="video-player-box"
                  ref="videoPlayer"
                  :options="playerOptions"
                  :playsinline="true"
                  customEventName="customstatechangedeventname"
                  @play="onPlayerPlay($event)"
                  @pause="onPlayerPause($event)"
                  @ended="onPlayerEnded($event)"
                  @waiting="onPlayerWaiting($event)"
                  @playing="onPlayerPlaying($event)"
                  @loadeddata="onPlayerLoadeddata($event)"
                  @timeupdate="onPlayerTimeupdate($event)"
                  @canplay="onPlayerCanplay($event)"
                  @canplaythrough="onPlayerCanplaythrough($event)"
                  @statechanged="playerStateChanged($event)"
                  @ready="playerReadied">
    </video-player>
  </div>
</template>

<script>
// require styles
import 'video.js/dist/video-js.css'

import { videoPlayer } from 'vue-video-player'

export default {
  components: {
    videoPlayer
  },
  data() {
    return {
      playerOptions: {
        // videojs options
        muted: true,
        autoplay: true,
        widt: '460',
        height: '360',
        language: 'en',
        playbackRates: [0.7, 1.0, 1.5, 2.0],
        sources: [
          {
            type: 'application/x-mpegURL',
            src: 'http://localhost:8080/live/hello.m3u8'
          }
        ],
        poster: '/static/images/author.jpg'
      }
    }
  },
  methods: {
    // listen event
    onPlayerPlay(player) {
      // console.log('player play!', player)
    },
    onPlayerPause(player) {
      // console.log('player pause!', player)
    },
    // or listen state event
    playerStateChanged(playerCurrentState) {
      // console.log('player current update state', playerCurrentState)
    },
    // player is ready
    playerReadied(player) {
      console.log('the player is readied', player)
      // you can use it to do something...
      // player.[methods]
    }
  }
}
</script>

代码自由编写调整。

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:admin@192.168.0.1/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);
        }
    }
}


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容

  • 这几天看到实验室里面的几个师兄个个都在搞这个,本着好奇地心里去看看,并自己动手简单的搭一下 这个简单的流媒体服...
    九尾74阅读 3,511评论 0 4
  • 流媒体传输是“直播”中至关重要的环节,在网络传输媒体流的时候有着不同的流媒体传输协议。 做了一些小调查,在整个“直...
    valentizx阅读 1,507评论 0 3
  • 今年秋天一直是晴天少,去年刚好相反,都是晴天。蓝天白云,每天都是。因为你在。 忍住没走,可是始终放不下。 是劫也是...
    林下听泉阅读 180评论 1 0
  • 瞧,她叶子金黄,枝干却是青绿 真像是画出来的,色彩 多么鲜亮。在这个暮秋时节 我竟叫不出她的名字 多么奇怪!她就像...
    叮咚的你阅读 248评论 0 2
  • 打卡日期:2019年5月5日 星期日 90天打卡累计天数:86/90 宣言(和孩子共成长) 孩子第四个30天目标:...
    明媚的奋奋阅读 121评论 0 0