基于传统IPC基础上的RTMP互联网推流摄像机方案设计
在我之前的一篇博客《EasyRTMP内置进入摄像机中实现网络推流直播摄像机的功能》中,我阐述了一种将RTMP推流内置到摄像机系统内部,实现安防摄像机转互联网直播的RTMP推流摄像机功能,如果搭载在高清的IPC上,可以实现一个 非常低成本、高性价比的互联网高清直播摄像机!
但是,这只是个推流,或者说,只是一个程序,或者说是一个SDK,那么如果要做成一个产品,仅仅是有核心功能是不够的,我们还需要将整个音视频的采集、编码、回调、转码、推流、配置、停止等一系列流程,如何将整个链条完全串联和控制,是一个推流产品应该做到的;
- 音视频源:直接由传统摄像机方案输出,例如RTSP、厂家的SDK(NetSdk、NetLib、LocalSdk)等等;
- 转码:由于安防出来的音频数据大多数G.711/G.726类型的,所以需要进行一次音频的转码过程,编码成AAC数据;
- 推流:RTMP推流过程;
- 接口控制:整个音视频源获取、转码、推流过程的配置获取/设置、推流过程的启/停,等接口(http+json);
RTMP推流摄像机实现方案
- 基于EasyRTSPClient / 摄像机SDK、EasyAACEncoder、EasyRTMP整合出,以设备编码源或RTSP流源作为音视频输入源,同时集成AAC转码的RTMP推流整套API方案;
- 基于上述API做一个推流管理器:配置、控制各推流通道及监视推流状态,同时向用户提供简单的web配置接口,用户可以通过浏览器配置通道推流地址及音视频源选择,及监视通道状态;
一、整合的RTMP推流API
基本上就是基于EasyRTMP、EasyAACEncoder及EasyRTSPClient库再封装出一个扩展型RTMP推流API,若音频编码不是aac则调AasyAACEncoder arm版转码,若源是rtsp则调EasyRTSPClient实现,如果license失败就只能屏蔽相应功能。
二、RTMP推流方案HTTP RESTful服务
管理器根据配置文件配置及管理推流,同时通过http服务接受用户配置并存入配置文件,推流配置包括基本源配置(有设备源和RTSP源),推流控制包括启停通道,设置RTMP推流地址;
HTTP服务提供推流状态及现有配置显示,及配置SET服务,浏览器请求后结合html+RESTful用于显示当前配置, 用户点击设置后浏览器通过http_get的url_query_params提交配置参数,http简易服务器自己实现,http解析可以使用http-parser库,配置文件使用ini文件格式,配置文件原形:
[base]
EasyRTMP_License=xxx
EasyAACEncoder_License=xxx
EasyRTSPClient_License=xxx
Enable=true
Source=local/RTSP
RtspUrl=rtsp://xxxx
RtmpUrl=rtmp://xxxx
三、web页面原形
只提供一个页面用于状态显示及配置
连接状态:已连接推流摄像机/未连接推流摄像机
推流状态: 推流中|通道错误|推流停止
控制: [启动] | [禁用]
源选择: 设备 | [RTSP] [应用]
RTSP源地址: [rtsp://xxx] [设置]
RTMP地址: [rtmp://xxx] [设置]
获取更多信息
Copyright © EasyDarwin.org 2012-2017

基于传统IPC基础上的RTMP互联网推流摄像机方案设计的更多相关文章
- sqlalchemy在pythonweb中开发的使用(基于tornado的基础上)
一.关于SQLAlchemy的安装pip install SQLAlchemy安装如果上面的方式安装不成功的情况可以使用下面的方法 百度下载window或者linux下面对应的sqlalchemy的版 ...
- 基于虹软人脸识别,实现RTMP直播推流追踪视频中所有人脸信息(C#)
前言 大家应该都知道几个很常见的例子,比如在张学友的演唱会,在安检通道检票时,通过人像识别系统成功识别捉了好多在逃人员,被称为逃犯克星:人行横道不遵守交通规则闯红灯的路人被人脸识别系统抓拍放在大屏上以 ...
- 流媒体基础实践之——RTMP直播推流
一.RTMP推流:用户可将RTMP视频流推送到阿麦提供的打流地址.地址格式类似于: rtmp://livepush.myqcloud.com/live 现在可以支持哪些直播源?和那些直播软件?推流参数 ...
- 如何基于Winform开发框架或混合框架基础上进行项目的快速开发
在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...
- 一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询
一种安全的云存储方案设计(未完整理中) 一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了.仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵. 这几年来,云产品层出不穷,但其安全性 ...
- 在Livemedia的基础上开发自己的流媒体客户端
一.背景 二.Livemedia框架介绍 1.总体框架 2.客户端框架 2.1 客户端openRTSP流程 2.2增加一种新的媒体 2.2.1增加媒体的format 2.2.2 新媒体需要考虑的问题 ...
- 最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)
===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(Acti ...
- 在Livemedia的基础上开发自己的流媒体客户端 V 0.01
在Livemedia的基础上开发自己的流媒体客户端 V 0.01 桂堂东 xiaoguizi@gmail.com 2004-10 2004-12 友情申明: 本文档适合已经从事流媒体传输工作或者对网络 ...
- mysql集群基于docker 在centos上
新博客https://blog.koreyoshi.work/ mysql集群(PXC)基于docker 在centos上 常用设计方案 Replication(复制) 速度快 弱一致性 低价值 场景 ...
随机推荐
- 转载——Visiual Studio2012 CLR20r3问题
看到有更新,习惯性的点了,升级到Visiual Studio Ultimate 2012 Update 1,并且按照提升重启了电脑.因为昨天太晚,也没验证.尽早打开VS,结果直接Crash.错误如下: ...
- Android新特性之CardView的简单使用
Android新特性之CardView的简单使用 我们学习下Android5.0的新增加的控件CardView.首先我们了解一下CardView的基本使用,然后结合RecycleView使用CardV ...
- AC日记——最高奖励 51nod 1163
最高的奖励 思路: 排序: 时间为第一关键字,按总小到大排: 价值为第二关键字,按从大到小排: 然后,不难看出,如果两个时间不同: 那么,两个时间之间最少能做一件事: 因为他们的时间下限最少相差1: ...
- C# ASP.NET中Process.Start没有反应也没有报错的解决方法
最近有一个很坑的需求,在ASP.NET中打开一个access,还要用process.start打开,调试时一切正常,到了发布后就没有反应,找了一下午,各种设文件夹权限也不行,最后把应用程序池改成管理员 ...
- mysql共享锁与排它锁
共享锁shared lock(也叫读锁read lock)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这保证了其 ...
- 转: https 加密通信流程
https 加密通信流程当用户在浏览器中输入一个以https开头的网址时,便开启了浏览器与被访问站点之间的加密通信.下面我们以一个用户访问https://qbox.me为例,给读者展现一下SSL/TL ...
- 苹果证书的申请、unityoc交互基础
注冊开发人员账号时:注意不要使用中国邮箱 99美金证书 :仅仅支持上传AppStore. 299美金证书:指的的我开发的应用是仅仅支持打包安装.企业级的. 假设申请了开发人员账号.也就是交了那几百美金 ...
- Struts2学习二----------访问Servlet API
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...
- URL Handle in Swift (一) -- URL 分解
更新时间: 2018-6-6 在程序开发过程之中, 我们总是希望模块化处理某一类相似的事情. 在 ezbuy 开发中, 我接触到了对于 URL 处理的优秀的代码, 学习.改进.记录下来.希望对你有所帮 ...
- jquery元素分组插件,用于把一连串元素分成多组,如把多个a标签分成多组放入<li>元素中,可以用于简化多图滚动为一个元素滚动,兼容ie6
三个参数 <script type="text/javascript"> /* *sclass:设置包裹元素的类 * packages:设置包裹的元素 * row:设置 ...