最近有一个项目, 进行步态识别的时候,同时需要显示摄像的实时画面。对于 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. STL 中 使用迭代器删除元素的问题

    在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. for(auto iter = v. ...

  2. php获取文章的第一张图片

    今天做东西的时候遇到一个问题就是如何把文章提取出来作为文章列表呢? 因为用了Ueditor,所以提交的数据包含了html标签. 搜索了一会找到了一个方案,用php自带的函数去掉了html标签. $ar ...

  3. 05_ switch 练习 _ 今天星期几

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. 终于明白了 C# 中 Task.Yield 的用途

    最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博文时发现文中代码中的一种 Task 用法之前从未见过,在网上看了 ...

  5. java script基本数据类型与数组

    基本数据类型 1.undefined  (var a;) 2.null   (var a=null); 3.String  (var a=" " or ' '); 4.boolea ...

  6. 用SharedPreference或文件的方式存储数据

    一.用SharedPreference存储数据 当程序有少量的数据需要保存,而这些数据的格式比较简单(例如一些配置信息),这个时候就可以使用SharedPreference来进行保存 下面例子将演示向 ...

  7. Map集合转成json数据

    maven项目需要导入一下依赖: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId> ...

  8. LG3369 普通平衡树

    题意 维护一些数,其中需要提供以下操作: 1.插入\(x\) 2.删除\(x\)(若有多个相同的数,只删除一个) 3.查询\(x\)的排名(排名定义为比当前数小的数的个数\(+1\)) 4.查询排名为 ...

  9. linux上磁盘的操作相关命令

    1.查看磁盘IO负载 - 看哪些进程在读写磁盘 lsof /dev/sda2 |head

  10. mac环境使用ATS验证

    https://blog.csdn.net/skylin19840101/article/details/53760146 参考的这篇文章,用 /usr/bin/nscurl --ats-diagno ...