高性能视频推送库Car-eye-push 设计

MQTT阿里云OTA 调试记录 2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。 阅读详情

在4G时代,移动终端网络越来越快,网络流量费越来越便宜,客观上为视频在各种领域应用创造了条件,尤其移动端视频监控,视频直播成为当下几个热点。car-eye-push就是为这些需求设计而成的一个高性能推送视频流库,它支持RTSP和RTMP两个种主要的视频直播协议。通过该库可以快速有效的将视频音频数据推送到视频服务器。下面记录下在整个推送库中涉及到几个要点。

1. 解决视频卡机不连续的问题

    car-eye 视频库中本身就包含一个环形队列池,能够在网络不十分好的时候具备一定的缓冲能力。在遇到缓冲满的时候,根据优先保持视频关键帧的数据的前提下删除最远的不能推送成功的数据。

2. 在推送音视频数据的时候,声音和视频不同步的问题

其实严格来说这个工作在客户端可以根据时间戳进行处理,但在推送这端,进行一点的同步也是有必要,我们采取音视频同步

到机器时间的方法,保证数据帧尽量在相同的时间推送出去。要知道视频和音频推送是在不同的线程中完成,这就需要处理临界段的问题。

3. 解决断开重连的问题

这个真的很重要,尽管网络采用4G,但终究是移动网络,在没有信号的时候,库本身要具有一定的重新连接能力。我们对视频发送长时间不成功,网络断开等都进行了自动连接处理。这不仅仅体现在设备端,同样体现在不同播放端。

4. 推送文件的精确定位

car-eye-push库不仅仅应用于视频直播,还应用历史回放。这样就要对历史文件进行处理。播放的程序可能是一些文件的一部分。甚至可能在客户端就要求视频对视频文件直接定位,快进等。所以我们需要对MP4等文件格式进行在时间轴上精确定位。

car-eye-push支持多通道推送数据,支持windows android,linux等多种系统,支持ARM,x86,x64和mips多种架构   API 接口简单,方便快速移植到自己的系统中。

我们看下他的接口定义:

接口说明:

/*
* Comments: 使用有效的Key进行CarEye推流器的注册以便使用, 使用本系统前必须进行注册才能正常使用
* Param key: 有效的密钥
* Param packName: 针对Android系统的应用程序包名
* @Return int CAREYE_NOERROR: 成功, 返回结果参考CarEyeError
*/
#ifdef ANDROID
CE_API int CE_APICALL CarEye_Register(char* key, char* packName);
#else
CE_API int CE_APICALL CarEye_Register(char* key);
#endif

/*
* Comments: 注册推流状态事件
* Param event: 获取推流状态的回调函数
* @Return None
*/
CE_API void CE_APICALL CarEye_RegisterStateChangedEvent(CarEyePusher_StateChanged event);

/*
* Comments: 启动RTSP推流通道 推流地址以三个参数进行组合: rtsp://svrip:port/name
* Param svrip: 流媒体服务器IP地址或域名
* Param port: 流媒体服务器端口号
* Param name: 推流的sdp名
* Param mediaInfo: 要推流的媒体信息
* @Return int 大于等于0: 启动的推流通道号 小于0错误编号参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StartRTSPPusher(char* svrip, unsigned short port, char* name, CarEye_MediaInfo mediaInfo);

/*
* Comments: 关闭指定的RTSP推流通道
* Param channel: 已启动的RTSP推流通道号
* @Return int 是否成功关闭, 状态码参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StopRTSPPusher(int channel);

/*
* Comments: 获取当前通道的推流器是否已经连接到服务器并做好推流准备
* Param channel: 通道号
* @Return int 0未做好准备, 非0做好准备
*/
CE_API int CE_APICALL CarEye_PusherIsReady(int channel);

/*
* Comments: 启动RTSP推流本地文件通道 推流地址以三个参数进行组合: rtsp://svrip:port/name
* Param svrip: 流媒体服务器IP地址或域名
* Param port: 流媒体服务器端口号
* Param name: 推流的sdp名
* Param fileName: 要推流的本地文件路径 目前暂时支持MP4文件
* Param startMs: 推流起始的毫秒数
* Param endMs: 推流结束的毫秒数 endMs必须大于startMs, 否则推流失败, 当两个参数都为0时推送全文件
* @Return int 大于等于0: 启动的推流通道号 小于0错误编号参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StartNativeFileRTSP(char* svrip, unsigned short port, char* name, char* fileName, int startMs, int endMs);

/*
* Comments: 关闭指定的本地文件RTSP推流通道
* Param channel: 已启动的RTSP推流通道号
* @Return int 是否成功关闭, 状态码参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StopNativeFileRTSP(int channel);

/*
* Comments: 启动RTMP推流通道
* Param svrip: 流媒体服务器IP地址或域名
* Param port: 流媒体服务器端口号
* Param name: 推流的通道名
* Param mediaInfo: 要推流的媒体信息
* @Return int 大于等于0: 启动的推流通道号 小于0错误编号参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StartRTMPPusher(char* svrip, unsigned short port, char* name, CarEye_MediaInfo mediaInfo);

/*
* Comments: 关闭指定的RTMP推流通道
* Param channel: 已启动的RTMP推流通道号
* @Return int 是否成功关闭, 状态码参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StopRTMPPusher(int channel);

/*
* Comments: 启动RTMP推流本地文件通道
* Param svrip: 流媒体服务器IP地址或域名
* Param port: 流媒体服务器端口号
* Param name: 推流的通道名
* Param fileName: 要推流的本地文件路径 目前暂时支持MP4文件
* Param startMs: 推流起始的毫秒数
* Param endMs: 推流结束的毫秒数 endMs必须大于startMs, 否则推流失败, 当两个参数都为0时推送全文件
* @Return int 大于等于0: 启动的推流通道号 小于0错误编号参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StartNativeFileRTMP(char* svrip, unsigned short port, char* name, char* fileName, int startMs, int endMs);

/*
* Comments: 关闭指定的本地文件RTMP推流通道
* Param channel: 已启动的RTMP推流通道号
* @Return int 是否成功关闭, 状态码参考CarEyeError
*/
CE_API int CE_APICALL CarEye_StopNativeFileRTMP(int channel);

/*
* Comments: 推送流媒体数据到指定通道中
* Param channel: 要推送的通道号
* Param frame: 要推送的帧数据
* @Return int 是否推送成功, 状态码参考CarEyeError
*/
CE_API int CE_APICALL CarEye_PushData(int channel, CarEye_AV_Frame* frame);

有关car-eye-push 开源平台和源码下载:www.car-eye.cn QQ技术交流群:590411159

S32K3实战:手把手教你用eMIOS模块实现电机PWM控制(附代码) 本文详细解析了NXP S32K3系列MCU的eMIOS模块在电机PWM控制中的应用,从硬件设计到软件实现,再到调试与优化,提供了完整的实战指南。通过eMIOS模块的硬件级PWM生成能力,工程师可以实现高精度的电机控制,适用于汽车电子和工业控制领域。 阅读详情

相关推荐

AppleAccount注册之生成sign

根据日志发现:签名来自于AuthKit的-[AKAppleIDServerResourceLoadDelegate signRequest:withCompletionHandler:]的一个block,这个库是放在共享缓存库里的,找到提前准备好的IDA文件,先去找主方法,根据分析IDA,最后找到了实际生成签名的方法:t1。,接受五个参数,context(之前讲的获取到的客户端证书),bytes(待加密的body字节),length(字节长度),以及两个接受结果的参数,直接进这个方法看,

2503_90751938的博客 1005

car-eye 流媒体SDK

car-eye 流媒体SDK是car-eye 开源团队针对android IOS windows linux等各种平台下开发的流媒体推送库和播放库的提供的一系列应用API接口。分成car-eye pusher,player,FFMPEG, server 各个章节,为各种流媒体音视频应用提供了完整的解决方案。以下是详细的文档说明:Car-eye RTSP client 库说明1 RTSP库接口说明关...

Car_eye的博客 1037

优快云余额充值前必读:这5个隐藏条款,90%的开发者都忽略了(附iOS内购避坑指南)

本文揭示了优快云余额充值中90%开发者忽略的5个隐藏条款,包括不可退款规则、iOS内购限制、账号安全责任等关键内容,特别提供了iOS内购避坑指南,帮助开发者避免资金损失和账号风险。

weixin_26765287的博客 147

SQL Server 2008 高可用性视频(二)-- 日志传送

  做数据库的朋友都知道, 其实数据库的工作大致可以分为三类: 数据库设计与开发, 数据库管理, 数据库商业智能. 其中数据库管理的工作大部分是由DBA在做, DBA们除了要保证正常的数据库运行, 还要采取必要措施提升数据库的性能, 比如数据库的性能优化, 以及保证数据库系统的高可用性. 我在前面发了几篇对SQL Server数据库进行调优的文章, 下面会再开一个SQL Server高可...

weixin_30521649的博客 3万+

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

企业微信-审批控件中的外部选项的应用全流程完美解决方案

完美解决企业微信所有JS-SDK调用问题 完美解决苹果和PC端不适配的问题

qq_45195039的博客 5867

开始(Get Started)

开始-Get Started介绍性视频技巧和窍门基础入门技巧和窍门用户界面主题设置按键绑定语种显示遥测 介绍性视频 介绍性视频 用这一套介绍性视频开启你的旅程!这些视频被设计用于vscode的功能和让你快速熟悉vscode。vscode对各种各样的像JavaScript和TypeScript语言的开箱即用的支持。这些视频使用JavaScript,但vscode可以随意使用你喜欢的语言! 开始 - 安装和学习vscode的基础功能: Getting started 自定义 - 通过改变设置、主题按键绑定个

喝咖啡的猫的博客 3万+

DBeaver连接IoTDB避坑指南:手动配置JDBC驱动的完整流程(附问题排查)

本文提供了在DBeaver中手动配置Apache IoTDB JDBC驱动的完整流程与避坑指南。详细解析了从驱动创建、库文件添加(关键是指向整个lib目录)到连接测试的每一步,并重点针对常见的ClassNotFoundException、连接拒绝等错误提供了深度排查方案,帮助用户高效建立图形化管理连接。

weixin_28327051的博客 395

微信网页全屏播放自动播放问题

video视屏播放在微信网页中的全屏自动播放一直是个很头疼的问提 1.自动播放问题 Android中是无法自动播放了,只能做用户引导页喽,微信app内核webkit版本低不支持 IOS中 加autoplay并且在onload事件之后调用一次play() id="Movies" src="./cdnfile/in.mp4" x5-playsinline="" x5-video-playe

Rings_G的博客 5517

PCL 循环体素滤波

本文提出了一种自动循环体素滤波算法,用于解决点云配准中分辨率差异大、参数设置复杂的问题。算法通过计算点云分辨率(公式1),采用迭代方式调整体素尺寸(公式2),逐步逼近目标分辨率。该方法在保留几何特征的同时有效精简数据量,实现了均匀分辨率的自动调整。实验通过PCL库实现,展示了原始点云与滤波结果的对比效果,验证了算法在减少数据规模方面的有效性。该方法为点云配准提供了预处理解决方案,相关成果已发表于SCI期刊。

点云侠的博客 281

如何设置Xilinx以太网IP核的Pause帧处理

这里要注意,为什么是或,第一个条件是该功能使能取反,也就是说,如果你设置使能不打开的话,这个条件是直接满足的;先来看图中第二句,判断该以太网数据包为Global Pause帧(gpp),首先要满足Step1,然后是由上图中第二句代码(assign global_pause_packet)后面的所有项“与”(&&)起来的,就是说要满足后面所有的项,分别是DA符合,SA符合,Etype符合,Opcode符合,并且使能了该功能(即设置ctl_rx_enable_gpp=1)。如果没通过,则进入Step3。

qq_43416206的博客 618

网页H5纯Web无插件多路RTSP视频播放

MiniWebRTSP纯Web无插件视频播放MiniWebRTSP视频播放主要特点浏览器兼容性视频编码协议音频安装教程使用说明联系我们仓库地址 MiniWebRTSP视频播放 **MiniWebRTSP **网页轻量化无插件多路播放RTSP视频。 通过WS协议实现超低延迟高性能,无需要经过浏览器转码,可达到与原生应用一样的性能(500ms以内)。多厂家、多设备类型支持,支持网络IPC、NVR、行业...

raylfx的博客 4225

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1844

什么是TypeScript,为什么我会用它代替JavaScript?

TypeScript是JavaScript的超集,主要提供可选的静态类型,类和接口。其中一个重要好处是使IDE能够在您键入代码时提供更丰富的环境来发现常见错误。 要了解我的意思,请观看Microsoft关于该语言的介绍性视频。 对于大型JavaScript项目,采用TypeScript可能会产生更强大的软件,同时仍可部署常规JavaScript应用程序。 它是开源的,但如果您使用支持的IDE,则只...

凡森 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

视频播放—— H5同层播放器接入规范

H5同层播放器接入规范 x5-video-player-type 启用H5同层播放器 通过video属性“x5-video-player-type”声明启用同层H5播放器 x5-video-player-type支持的值类型:h5 示例: <video src="http://xxx.mp4" x5-video-player-type="h5"/> 注:...

weixin_30723433的博客 1048

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

webrtc QOS方法三(SVC实现)

一、概念 SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。 二、概述 SVC以AVC视频编...

CrystalShaw的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SQL Server 2008 高可用性视频

嗨, 各位朋友, 这篇博文上有所有已发布的视频汇总. [置顶]SQL Server 2008 高可用性视频(一)--纵览与对比 SQL Server 2008 高可用性视频(二)-- 日志传送 SQL Server 2008 高可用性视频(三)-- 数据库镜像 SQL Server 2008 高可用性视频(四)-- 故障转移群集 全部视频 转载于:https://ww...

weixin_30902675的博客 602

dm368 resizer

dm365 dm368芯片拥有的resizer模块,可以从ipipe里面直接获取连续性视频数据,也可以从sdram获取视频帧数据,然后进行缩放。   所谓的缩放除了分辨率变化,还有格式变化。resizer可以将uyvy 422的图像变换为yuv420psemi格式。不过从不严格的意义上讲,这样的变化也导致的数据量的变小,也算是缩小吧,哈哈。   后端的缩放必须要在one shot模式下进行,这个和

micklf的博客 1841

程序大牛养成记-花川学院-专题视频课程

本视频为优快云学院自制搞笑短片,非学习性视频

huachuanxueyuan的博客 1202

(Adobe Premiere Pro CS4)[ISO]《Adobe非线性视频编辑软件》

软件大小:2.46GBAdobe Premiere Pro CS4[安全检测]已通过安全检测安全检测软体:ESET NOD32 Antivirus版本:3.0.669.0杀毒引擎版本:3538(20081020)[安装测试]未经过安装测试,使用者后果自负与本论坛无关共用伺服器:eDonkeyServer No1、eDonkeyServer No2、!! Saugstube !!共用服务时间:全天不...

心语家园 - www.xinyucn.cc 1583

网络分布视频技术与盈利性视频站点技术

如果你想经营或者正在经营一个网络视频的站点,你会担心视频版权,担心盈利模式,那么你可以采用我们做的分布式网络视频技术,我们采用了分布下载的策略支撑起海量用户,客户端定制播放器来保护视频版权,灵活多样的flash广告以及传统的视频广告使您进入盈利模式。有意联系:chenjianfeng@cabrtech.com声明:我们的分布下载不是BT方式,是我们自己独立开发的,有全部的源代码。

ArichiNAD的专栏 1万+

android 图片压缩_实用性视频转gif,压缩等常用文件工具处理及转换(含自写python工具)...

背景图:来源花瓣网本文包含一些实用性的工具的推荐使用,和利用python去写一些实用性工具,我会把类似于像视频转换,pdf压缩啊,统统的在这里做一个收集,感兴趣的可以收藏和关注我,背景:大概我写《android开发专栏》系列文章的时候,会遇到需要展示一个demo给大家观赏的需求,从17年到现在,我用过太多太多工具,但是都是变化的;最近在我完成上篇《动手写一个CollapsingToolbarLay...

weixin_39712969的博客 708

360度视频只是过渡,VR视频的“真交互”春天还没到

360度视频只是VR视频的过渡期,VR视频到底需要什么样的交互方式?为什么交互性的VR视频还没有出现在各大视频网站平台上? 最近,国外高清视频内容平台Vimeo宣布上线360度视频频道,允许用户上传、观看360度视频,而且Vimeo还开启了内容付费模式,让内容制作者在其平台上通过VR视频获取收入。同一时期,Facebook也...

weixin_34007879的博客 787

流媒体技术探讨

流媒体技术探讨流媒体技术探讨... 1一、可扩展性视频编码技术... 21、非扩展性视频编码流式技术... 22、传统的分层可扩展性编码... 33、精细的可扩展性编码... 4二、H.264的网络“亲和性”. 41、H.264在视频编码层的差错控制... 42、H.264在网络提取层的差错控制... 6三、在H.264中结合可扩展性视频编码技术... 61

小三的学习园地 3379

精准推送服务系统架构设计

OCPX接口设计

hauchun的博客 1799
上一篇: VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法
下一篇: Car-eye 开源平台的下一步思考
路过&
博客等级 码龄19年 126粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值