最近有一个项目, 进行步态识别的时候,同时需要显示摄像的实时画面。对于 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. JavaScript(六)

    定时器 定时器在javascript中的作用1.制作动画2.异步操作3.函数缓冲与节流 定时器类型及语法 /* 定时器: setTimeout 只执行一次的定时器 clearTimeout 关闭只执行 ...

  2. LOJ #6303. 水题 (约数 质因数)

    #6303. 水题 内存限制 10 MiB 时间限制:1000 ms 标准输入输出 题目描述 给定正整数 n,kn, kn,k,已知非负整数 xxx 满足 n!modkx=0,求 xmaxx_{max ...

  3. Web 录音

    所需文件下载地址 链接:https://pan.baidu.com/s/1Dzbv8gPUZJ3T8Fe02hOJvg 提取码:zbgt py文件 from flask import Flask, j ...

  4. 201771010118《面向对象程序设计(java)》第四周学习总结

    1.实验目的与要求 (1) 理解用户自定义类的定义: (2) 掌握对象的声明: (3) 学会使用构造函数初始化对象: (4) 使用类属性与方法的使用掌握使用: (5) 掌握package和import ...

  5. 图片编辑工具GIMP

    今天修改图片: 给图片添加alpha通道,选中要删去的部分,就会变成透明,要保存为png格式 文库参考: http://wenku.baidu.com/link?url=HR1lKoBKS1xbhUJ ...

  6. Node.js 开发

    Node.js不必介绍,已经太火爆了.简单说是用Javascript开发Web服务端,基于Google V8引擎,单线程.不多说从零开始Windows平台下的Node.js的开发之旅. 环境工具为先 ...

  7. springboot+rediscluster

    @EnableCaching @Configuration public class RedisConfiguration extends CachingConfigurerSupport { @Au ...

  8. 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good

    最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...

  9. LG3834 可持久化线段树1

    题意 给定\(N\)个整数构成的序列,将对于指定的闭区间查询其区间内的第\(K\)小值. $n \leq 2 \times 10^5 $ 思路 在\([l,r]\)区间内的数的个数,可以用\(sum[ ...

  10. mysql中的count()函数

    1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数. 2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会 ...