最近有一个项目, 进行步态识别的时候,同时需要显示摄像的实时画面。对于 Winform 显示画面,之前针对 rtmp 流的时候,是先写一个HTML 网页加载视频流,然后在IIS上发布,将地址直接赋值给winform中 WebBrowser 控件的Url值即可。

 this.webBrowser1.Url = new Uri("http://192.168.0.217:8063/player.html");

针对HTML部分,网上有很多开源的Demo,已封装好,没啥值得研究的事情。本来顺顺利利,而现在是海康原生的 rtsp 流,Winfrom 没啥好的解决方案,于是首先想到如何将 rtsp 流转成rtmp流 。于是乎采坑之路就此开始。首先是下载ffmpeg ,然后搭建nginx 服务器。进行配置,再在dos界面执行相关指令,看起来很简单,实际上坑贼多。针对 ffmpeg 来说,还很简单,直接下载即可,然后将exe的同级目录的路径拷贝到配置变量中 。再管理员身份打开cmd后,执行 ffmpeg -version 出现长串字符即为成功

重点是nginx服务器的配置。 之前没听过这个,虽然网上很多相关的帖子,五花八门。很多人给的教程不全,或者上来就是改代码。对于小白来说确实不知所云。在尝试了多个版本之后,找到了一个比较靠谱的帖子,这里小小感谢下,Windows下用FFmpeg+nginx+rtmp搭建  ,按照步骤下来,nginx 还是没有启动,最后百度,在nginx-win-rtmp.conf 文件中,需要加入rtmp的信息,红字部分

events {
worker_connections 8192;
# max value 32768, nginx recycling connections+registry optimization =
# this.value * 20 = max concurrent connections currently tested with one worker
# C1000K should be possible depending there is enough ram/cpu power
# multi_accept on;
}

rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
     }
  }
}

加入之后,仍然无法启动,查看log发现是默认的80端口被占用,于是乎按照网上小伙伴绝大多数给的说法,先查询这些80端口被那些程序占用,执行命令: netstat -aon|findstr "80"  ,然后记录下PID,然后依次在进程中查看PID,找到源头,最后关闭这些万恶的源头。

一瞅,发现这么多的80端口列表,很多还是不能关闭的,于是乎这条路又断了,后来一项,把端口改成其他的数字不就可以。于是忽,再次进入 nginx-win.conf、nginx-win-rtmp.conf 中将server中 listen 值由 80改成84 后,再次执行命令

dos界面,管理员进入nginx.exe同级目录后,执行 nginx.exe -c conf\nginx-win-rtmp.conf 后,终于成功了,在任务管理器中发现了nginx 的进程。这里nginx启动好以后,接下来就是执行推流任务。同样用管理员身份进入cmd,执行

ffmpeg -i "rtsp://admin:admin@192.168.0.246:554/Streaming/Channels/1?transportmode=unicast" -f flv -r  -s 640x360 -an  rtmp://localhost:1935/live/room 

注意,这里有两个坑,一个是必须要管理员打开cmd,还有一个是后面的  -an rtmp://localhost:1935/live/room(自行编辑) ,和前面的是一条完整的命令,很多帖子写的是两行,这样直接粘贴过去的话,同样执行失败。最后成功时,界面如下

这个会一直往下跑,代表着一直在推 啊推啊流,(不能关闭)这样一番操作之后,rtsp流就成功的转换为了rtmp流。于是乎winform界面就可以操作此流进行播放.......

这个只是小小的研究一下,正常环境肯定不能这样进行测试,贼难用,后来用了其他的第三方dll插件库引用来处理

C# rtsp 转码rtmp nginx踩下的坑的更多相关文章

  1. 关于rtsp转码rtmp播放的两种方式,客户端直接转,远程服务器转

    需求 一.场景 用户多家门店有监控探头,设备是海康的和大华的.用户总部和门店不在一个网络下,并且总部要能实时调用查看门店监控,和门店回放画面.我们知道监控摄像机获取的视频是 rtsp 流的格式. 只能 ...

  2. Linux安装mysql以及安装时踩下的坑

    安装: 检测是否已经安装了mysql rpm -qa | grep mysql 如果已经安装了,将其卸载,如: rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x86 ...

  3. 基于rtmp+nginx 、vlc实现FFmpeg推流与wpf端拉流

    这周在研究基于rtmp+nginx直播流的实现,现总结如下: 0.所需文件: 链接:https://pan.baidu.com/s/1U5gsNI8Rcl684l5gVL6swg 提取码:dli9 1 ...

  4. Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器

    Java 监控直播流rtsp协议转rtmp.hls.httpflv协议返回浏览器 目录 需求背景: 一:了解音视频流协议: 二:方案一 rtsp 转rtmp 1.下载nginx + nginx-rtm ...

  5. saltstack之(九)配置管理源码部署Nginx

    场景:rpm包安装的nginx服务,无法满足定制模块的需求,故线上环境使用nginx源码进行安装.本片文章详细介绍如何使用saltstack的配置管理功能实现nginx软件的源码安装. 下载源码:pc ...

  6. 源码安装nginx以及平滑升级

                                                           源码安装nginx以及平滑升级                               ...

  7. Nginx环境下配置PHP使用的SSL认证(https)

    最近一段时间发现好多网站都从http协议变成了加密的https协议,比如说百度.吾志等等.https看起来比http高端了好多,而且在不同的浏览器向上还会显示出不同于http的URL展示效果(比如说c ...

  8. 【转】Nginx windows下搭建过程

    Nginx windows下搭建过程 内容列表: 简要介绍 下载安装 配置测试 一.简要介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器, ...

  9. 源码安装Nginx以及用systemctl管理

    一.源码安装Nginx: 先安装gcc编译器(安装过的可以忽略) [root@localhost ~]# yum -y install gcc gcc-c++ wget 进入src目录 [root@l ...

随机推荐

  1. C++ 控制台推箱子小游戏

              // 游戏菜单.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #in ...

  2. HTML入门7

    这篇来些可能用的比较少的,调试HTML 程序员调试代码常见,遇到问题一切正常,找出问题解决,满足 来了解下HTML调试, 在浏览器解析和显示之前HTML不会被编译成其他形式,只是解析而不是编译因此运行 ...

  3. __x__(42)0910第六天__表格布局 老旧的布局方法

    table 布局 不易于维护,耦合太严重了. 不利于搜索引擎检索. 效果图: html代码: <!doctype html> <html> <head> <m ...

  4. FJUT3260

    不是啊..不是说双栈嘛,,怎么是个**题啊. 链接:  http://120.78.128.11/Problem.jsp?pid=3260    从左到右扫一遍,把相交的区间扔到一起算,那么就变成了一 ...

  5. jdbc的入门学习

    一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...

  6. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  7. python语法_列表list_列表内置方法

    list 列表 a = ['kevin','alxe','gm','dql','gyx'] a[1] = 'alxe' #按照索引获取数据,索引按照0开始,第一个数据的索引为0 切片: a[1:3] ...

  8. Selenium 3----鼠标、键盘操作常用方法

    [鼠标] 在 WebDriver 中, 关于鼠标操作的方法封装在 ActionChains 类中. ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 Action ...

  9. 2.2String工具类

    1:split方法 public class SplitDemo1 { public static String[] name = new String[20]; public SplitDemo1( ...

  10. 如何设置默认以管理员权限运行cmd

    设置cmd以管理员权限运行 目的:创建或删除文件等命令时,需要管理员权限运行cmd(linux以root用户登录).   例如,创建日志目录.   方法一: 1.激活administrator用户 2 ...