zoukankan      html  css  js  c++  java
  • 手机直播编码器librtmp与RTMPClient客户端EasyRTMPClient对比以及RTMPSourceCallBack数据回调说明

    毋庸置疑,librtmp是RTMP领域的巨人之一,无论是RTMP-Client,还是RTMP-Push,无数的项目都在引用librtmp实现播放器、手机直播、编码器等功能。既然librtmp如此成功,为什么又要实现EasyRTMPClient这样一套RTMP工具呢?

    EasyRTSPClient可以说已经是深入了我们研发人员平时运维工作中了,当我们发现有任何RTSP源或者摄像机无法播放的时候,用EasyRTMPClient工具运行检测一下,就能够辨别问题的原因。但是,在商用的RTMPClient的需求中,librtmp和EasyRTMPClient还是有几点功能是不同的。

    下面我们就来看一下librtmp和EasyRTMPClient的功能区别:

    1、自动重连

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

    2、裸数据回调

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

    3、错误码及错误信息回调

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

    4、小而美

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

    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 */
    

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

  • 相关阅读:
    iOS多线程开发小demo5 线程间的通信
    iOS多线程开发小demo4,线程的同步问题
    iOS多线程开发小demo3,线程的状态
    iOS多线程开发小demo2,NSThread篇
    iOS多线程开发小demo
    iOS开发多线程基础知识
    sublime text 3 3083 注册码
    Canvas现实画板功能
    CSS3动画进度条
    移动端使用HTML5表单增强体验
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/12011153.html
Copyright © 2011-2022 走看看