基于传统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(复制) 速度快 弱一致性 低价值 场景 ...
随机推荐
- Codeforces Gym100735 I.Yet another A + B-Java大数 (KTU Programming Camp (Day 1) Lithuania, Birˇstonas, August 19, 2015)
I.Yet another A + B You are given three numbers. Is there a way to replace variables A, B and C with ...
- 长安大学第四届“迎新杯”程序设计竞赛 F 打铁的箱子【数学/进制思维/折半枚举】
题目描述 作为彩虹岛上最擅长打铁的人,
- Codeforces Round #450 (Div. 2) A. Find Extra One【模拟/判断是否能去掉一个点保证剩下的点在Y轴同侧】
A. Find Extra One time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Linux(二) 常用命令
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debianaa 安装VMware或VirtualBox虚拟机 ...
- 原生js获取元素的样式信息
工作中经常会需要获取DOM元素的样式,之前都是通过jquery的css()方法,现在总结一下通过原生js获取元素样式的方法. obj.style js var _width = obj.style.w ...
- 【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
参考链接:https://www.cnblogs.com/crazyacking/p/5573528.html ================================== java紫色代表迭 ...
- ylb:了解存储过程
ylbtech-SQL Server:SQL Server-了解存储过程 了解存储过程 ylb:了解存储过程 返回顶部 存储过程 2.2.1 主要的编程结构: 变量 数据类型 输入/输出变量 返回值 ...
- 2017.2.28 activiti实战--第六章--任务表单(一)动态表单
学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...
- HTML5 Canvas 绘制英国国旗
代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...
- 【工具类】Date、Long、String 类型互转
开发常常遇到Date.Long.String 三种类型数据须要互转的问题.以此记录. public static void main(String[] args) throws ParseExcept ...