zoukankan      html  css  js  c++  java
  • 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient

    之前的一篇博客《网络摄像机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合并;

    EasyRTMPClient

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

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

    EasyRTMPClient

    • 小而美:

      实际上述锁描述的功能点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

    EasyDarwin

  • 相关阅读:
    【JMeter_14】JMeter逻辑控制器__交替控制器<Interleave Controller>
    【JMeter_13】JMeter逻辑控制器__执行时间控制器<Runtime Controller>
    【JMeter_12】JMeter逻辑控制器__包括控制器<Include Controller>
    【JMeter_11】JMeter逻辑控制器__Switch控制器<Switch Controller>
    【JMeter_10】JMeter逻辑控制器__ForEach控制器<ForEach Controller>
    【JMeter_09】JMeter逻辑控制器__临界部分控制器<Critical Section Controller>
    【JMeter_08】JMeter逻辑控制器__While控制器<While Controller>
    【JMeter_07】JMeter逻辑控制器__循环控制器<Loop Controller>
    【JMeter_06】JMeter逻辑控制器__If控制器<If Controller>
    【JMeter_05】创建第一个简单的接口脚本
  • 原文地址:https://www.cnblogs.com/babosa/p/8206947.html
Copyright © 2011-2022 走看看