2021年1月19日星期二

一个小时开发的直播推拉流软件来了

一、简介

目前市面上直播推流的软件有很多,拉流也很常见。近期因为业务需要,需要搭建一整套服务端推流,客户端拉流的程序。随即进行了展开研究,花了一个小时做了个基于winfrom桌面版的推拉流软件。另外稍微啰嗦两句,主要怕你们翻不到最下面。目前软件还是一个简化版的,但已足够日常使用,比如搭建一套餐馆的监控,据我了解,小餐馆装个监控一般3000—5000,如果自己稍微懂点软件知识,几百元买几个摄像头+一台电脑,搭建的监控不足千元,甚至一两百元足够搞定了。这是我研究这套软件的另外一个想法。

二、使用的技术栈:

1、nginx 

2、ffmpeg 

3、asp.net framework4.5 winfrom 

4、开发工具vs2019 

5、开发语言c#

关于以上技术大体做下说明,使用nginx做为代理节点服务器,基于ffmpeg做推流,asp.net framework4.5 winfrom 做为桌面应用。很多人比较陌生的可能是ffmpeg,把它理解为视频处理最常用的开源软件。关于它的更多详细文章可以去看阮一峰对它的介绍。"FFmpeg 视频处理入门教程"。

5.1启动nginx的核心代码

using MnNiuVideoApp.Common;using System;using System.Diagnostics;using System.IO;using System.Windows.Forms;namespace MnNiuVideoApp{ public class NginxProcess {  //nginx的进程名  public string _nginxFileName = "nginx";  public string _stop = "stop.bat";  public string _start = "start.bat";  //nginx的文件路径名  public string _nginxFilePath = string.Empty;  //nginx的启动参数  public string _arguments = string.Empty;  //nginx的工作目录  public string _workingDirectory = string.Empty;  public int _processId = 0;  public NginxProcess()  {   string basePath = FileHelper.LoadNginxPath();   string nginxPath = $@"{basePath}\nginx.exe";   _nginxFilePath = Path.GetFullPath(nginxPath);   _workingDirectory = Path.GetDirectoryName(_nginxFilePath);   _arguments = @" -c \conf\nginx-win.conf";  }  //关掉所有nginx的进程,格式必须这样,有空格存在 taskkill /IM nginx.exe /F  /// <summary>  /// 启动服务  /// </summary>  /// <returns></returns>  public void StartService()  {   try   {    if (ProcessesHelper.IsCheckProcesses(_nginxFileName))    {     LogHelper.WriteLog("nginx进程已经启动过了");    }    else    {     var sinfo = new ProcessStartInfo     {      FileName = _nginxFilePath,      Verb = "runas",      WorkingDirectory = _workingDirectory,      Arguments = _arguments     };#if DEBUG     sinfo.UseShellExecute = true;     sinfo.CreateNoWindow = false;#else    sinfo.UseShellExecute = false;

没有评论:

发表评论