之前的一篇博客《网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient》,我们介绍了RTSP流的检测和分析工具EasyRTSPClient,可以说已经是深入了我的平时运维工作中了,当我们发现有任何RTSP源或者摄像机无法播放的时候,我用EasyRTSPClient工具运行检测一下,就立即能够知道问题原因,真是非常非常方便;

EasyRTSPClient方案Github:https://github.com/EasyDSS/EasyRTSPClient

有librtmp,为什么还要做EasyRTMPClient?

毋庸置疑,librtmp是RTMP领域的巨人之一,无论是RTMP-Client,还是RTMP-Push,无数的项目都在引用librtmp实现播放器、手机直播、编码器等功能,实际上我们做RTMPClient也无需再实现一套,直接使用librtmp就可以了,但是,librtmp距离我们商用的RTMPClient的需求总是差这么或者那么几个功能:

  • 自动重连:

    实际自动重连功能在librtmp外围调用也是可以实现的,但是由于开发者的水平参差不齐,要非常好地实现重连回收,做稳定重连这个功能点,是非常困难的,尤其是各种内存和对象以及重连时机的选择,我们选择在底层进行RTMPClient重连,为上层开发者减少由于协议带来的学习成本和开发成本,这样,哪怕上层开发者不懂RTMP技术,也可以非常好地实现一个稳定、高效的RTMP播放器客户端;

  • 裸数据回调:

    librtmp回调出来的flv数据,就好比RTSP客户端回调出来的有时候是RTP数据,这些数据比较难被H.264工具做gop和关键帧的分析,只有都统一在底层将flv封装成H.264数据类型,上层无论是做解码显示,还是录像存储,还是数据分析,都非常简单了,不用再在上次做sps、pps解析,做flv合并;

  • 错误码及错误信息回调:

    遇到无法播放的RTMP流是,librtmp没有很好地统一将对应的错误码,比如:无法访问错误、socket错误、401错误等等,我们需要这些回调以一个统一的出口回调到上层,再由上层进行对应的处理方案;

  • 小而美:

    实际上述锁描述的功能点ffmpeg都是能做到的,但是ffmpeg只做一个RTMPClient功能的话,过于庞大,导致整个App的包会比较大,我们需要的是一个小而美的工具组件,被集成在用户的App中,开发者和用户能以极低的学习成本,就能轻松掌握需要开发的功能点;

EasyRTMPClient

EasyRTMPClient是一套非常稳定、易用、支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单。该EasyRTMPClient库未使用或参考现有的任何RTMP库,完全自主实现,因此,EasyRTMPClient更易于维护,稳定性、可扩展性得以提升,同时,本RTMP库全平台支持(包括windows/linux 32&64,ARM各平台,android, ios)!

Github:https://github.com/EasyDSS/EasyRTMPClient

调用流程

RTMPSourceCallBack数据回调说明

EasyRTMPClient可以回调出多种类型的数据:

#define EASY_SDK_VIDEO_FRAME_FLAG  /*视频帧数据*/
#define EASY_SDK_AUDIO_FRAME_FLAG /*音频帧数据*/
#define EASY_SDK_EVENT_FRAME_FLAG /*事件帧/日志数据*/

EASY_SDK_VIDEO_FRAME_FALG 数据可支持的视频格式:

#define EASY_SDK_VIDEO_CODEC_H264

视频帧标识支持

#define EASY_SDK_VIDEO_FRAME_I  /* I帧 */
#define EASY_SDK_VIDEO_FRAME_P /* P帧 */
#define EASY_SDK_VIDEO_FRAME_B /* B帧 */

当回调出RTSP_FRAME_INFO-codec为EASY_SDK_VIDEO_CODEC_H264数据,RTSP_FRAME_INFO->type为EASY_SDK_VIDEO_FRAME_I关键帧时,我们输出的数据结构为SPS+PPS+I的组合:

|-----sps-----|-----sps-----|-------I Frame-------|
| | | |
|---------reserved1-----reserved2-------------length

EASY_SDK_AUDIO_FRAME_FLAG数据可支持多种音频格式:

#define EASY_SDK_AUDIO_CODEC_AAC  /* AAC */
#define EASY_SDK_AUDIO_CODEC_MP3 /* MP3 */

如果以上格式无法满足您的需求,可联系我们进行定制开发。

获取更多信息

邮件:support@easydarwin.org

QQ交流群:587254841

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS商用流媒体解决方案:www.EasyDSS.com

EasyNVR无插件直播方案:www.EasyNVR.com

Copyright © EasyDarwin Team 2012-2017

各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient的更多相关文章

  1. 抛开flash,自己开发实现C++ RTMP直播流播放器

    抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...

  2. 三、直播整体流程 五、搭建Nginx+Rtmp直播流服务

    HTML5实现视频直播功能思路详解_html5教程技巧_脚本之家 https://m.jb51.net/html5/587215.html 三.直播整体流程 直播整体流程大致可分为: 视频采集端:可以 ...

  3. Windows10环境下 Nginx+ffmpeg自搭服务器制作RTMP直播流

    Windows10环境下 Nginx+ffmpeg自搭服务器制作RTMP直播流学习笔记 所需条件: nginx-rtmp-module(带rtmp模块) ,链接:https://link.jiansh ...

  4. 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现

    上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...

  5. 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...

  6. 极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果

    在尝试使用webRTC实现webapp直播失败后,转移思路开始另外寻找可行的解决方案.在网页上尝试使用webRTC实现视频的直播与看直播,在谷歌浏览器以及safari浏览器上测试是可行的.但是基于基座 ...

  7. QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV

    [原创文章,转载请注明来源,方便查看本文更新] 这段时间需要用QT开发一个播放直播流的功能,能够播放各种格式的直播流,并且CPU占用率不要太高(可以占用GPU),这些是我们的目标. 直播流推流的技术进 ...

  8. nginx开发(四)调用ffmpeg,搭建rtmp直播流。

    1: 修改conf文件,配置rtmp直播 打开usr/local/nginx/conf/nginx.conf,添加红色内容: rtmp {#rtmp点播配置    server {        li ...

  9. 搭建rtmp直播流服务之2:使用java实现ffmpeg命令接口化调用(用java执行ffmpeg命令)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.环境搭建 1.安装ffmpeg 下载对应系统的ffmpeg安装包,个人采用windows平台进行开发,所以安装了windo ...

随机推荐

  1. WKWebView携带不上cookie的问题处理

    自从WKWebView推出后Apple官方及众多开发者都推荐使用它代替UIWebView,确实通过加载速度.占用内存方面的对比都要好上几个档次,索性就把项目中的浏览器控件换成了WKWebView,一开 ...

  2. 记一个react拖动排序中的坑:key

    在做一个基于react的应用的时候遇到了对列表拖动排序的需求.当使用sortable对列表添加排序支持后发现一个问题:数据正确排序了,但是dom的顺序却乱了,找了一会儿原因后发现是因为在渲染数据的时候 ...

  3. ansible-playbook启动的多种方式

    #quick start ## start the playbook with no password, it will run "sudo su - root" at the t ...

  4. 洛谷——P1186 玛丽卡

    P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...

  5. Network | CIDR

    无类别(现在) 无类别域间路由(Classless Inter-Domain Routing.CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法. CI ...

  6. dml语句就是你常写的sql语句,增删改查

    dml语句就是你常写的sql语句,增删改查

  7. 键盘弹出后上提view隐藏后下拉view还原并修改scroll过程中旋转屏幕到竖屏view显示错误

    1,注册键盘相应事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillSho ...

  8. 【spring boot】10.spring boot下的单元测试

    spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...

  9. EXCEL最大行数问题:org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)

    今天在使用POI导出数据时,出现如下错误: ES查询阅读推荐比: resList: start: 写入excel Exception in thread "main" java.l ...

  10. String转Map的工具类

    借鉴代码 public class StringToMapUtil { public static Map<String, String> getValue(String param) { ...