技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

EasyDarwin/EasyPusher 深度技术分析

项目背景与痛点

EasyDarwin/EasyPusher 是一款免费的开源直播推送库,为开发者提供了一套简便、高效、稳定的解决方案,用于将音视频数据推送到采用标准RTSP/RTP协议的流媒体服务器。这种推送技术在应急指挥系统中尤为重要,因为它允许信息在低延迟下实时传输,确保了关键控制指令和视频监控数据的及时性和准确性。

开发商选择 EasyPusher 的原因有几个。首先,市面上许多商业解决方案收费昂贵,运营成本高。其次,开源理念下,EasyPusher 能够与开发者积极互动,调整和优化功能以更好地适配具体需求。最后,跨平台特性意味着它可以支持多种操作系统和硬件架构,极大拓宽了其应用范围。

核心技术揭秘

技术栈与架构设计

EasyPusher 的设计基于一系列跨平台支持和低延时推送需求。支持将 H.264、H.265、G.711、G.726 和 AAC 等音视频编解码格式直接封装成 RTSP/RTP 音视频流,发送至指定的 RTSP 流媒体服务器。

理解其内部工作流程,我们可以通过以下 Mermaid 架构图看出关键组件及其数据流动情况:

graph TD A[数据捕获] --> B{"格式选择"} B -->|"H.264"| C[编码器] B -->|"H.265"| D[编码器] B -->|"G.711"| E[编码器] B -->|"G.726"| F[编码器] B -->|"AAC"| G[编码器] C --> H1[RTP打包] D --> H2[RTP打包] E --> H3[RTP打包] F --> H4[RTP打包] G --> H5[RTP打包] H1 --> I{"RTSP服务器"} H2 --> I H3 --> I H4 --> I H5 --> I

正如图表所示,输入的原始媒体数据通过编码器处理后转换成合适的编解码格式,再由 RTP 包装器包装成 RTP 包,并最终通过 RTSP 通道传输到服务器端。跨平台支持通过原生封装或通过特定架构路径实现。

核心算法实现

在 EasyPusher 中,核心的编码器选型是关键之一,它们支持不同的编解码标准,确保在低延时和高带宽利用率之间取得良好的平衡。为了实现这一目标,每种编码器都有其独特的设置和优化过程,如调整分辨率、帧率、码率等。

功能亮点与差异

与同类竞品相比,EasyPusher 的技术亮点主要集中在其支持广泛的平台以及高效的推送能力上。它能够无缝兼容多种设备和环境,关键在于其开源的本质,便于开发者根据具体场景调整和优化性能。

此外,低延时在实时音视频通讯中相当重要,EasyPusher 则能保障这一性能指标,满足行业对于实时性反馈的需求。

应用场景与落地建议

在生产环境中使用 EasyPusher 时,需要特别关注网络环境稳定性,以及编码器性能的合理配置。此外,还要留意数据传输协议中的各种细节设置,确保底层基础架构可以支持高效的推送。推荐使用该技术的设计模式是针对那些需要遍布全局、且实时性通信的关键任务领域,便捷高效,无缝对接现有的视频背传递系统,如远程医疗、指挥调度平台等。

综合评价

综上所述,EasyDarwin/EasyPusher 在音视频推送领域展现了出色的低延时性能与跨平台部署能力。由于设计简明高效,它能够快速、准确地将信息传递给目标用户。不过,它的开源特性,在某些复杂环境下的定制优化需开发者额外支配合。总之,对于急切需要具备适应多种环境的低延时流媒体推送的开发者而言,EasyPusher 是一个值得推荐的优质方案。

简要分析

热度分
1671
价值分
611
活跃状态
活跃

语言占比

Batchfile
C
C++
Makefile
Objective-C
Shell

README

EasyPusher v2.0

EasyPusher RTSP推流是EasyDarwin开源流媒体团队开发的一款推送流媒体音/视频流给标准RTSP流媒体服务器(如EasyDarwin、Wowza)的流媒体推送库,全平台支持(包括Windows、Linux、ARM、Android、iOS),通过EasyPusher我们就可以避免接触到稍显复杂的RTSP/RTP/RTCP推送流程,只需要调用EasyPusher的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给RTSP流媒体服务器进行处理和转发,EasyPusher经过长时间的企业用户体验,稳定性非常高;更重要的是EasyPusher是完全免费使用的!

工作流程

EasyPusher Work Flow

功能版本

  • EasyPusher-Android:实时采集安卓摄像头音视频(Android 5.0+支持采集手机桌面屏幕进行直播),进行H.264/AAC编码后,调用EasyPusher进行直播推送,项目地址:https://github.com/EasyDarwin/EasyPusher-Android ;

  • EasyPusher-iOS:实时采集iOS摄像头音视频进行H.264/AAC编码,调用EasyPusher推送到RTSP流媒体服务器,项目地址:https://github.com/EasyDarwin/EasyPusher-iOS ;

  • EasyPusher_File:推送本地文件到RTSP流媒体服务器进行文件直播;

  • EasyPusher_RTSP:通过EasyRTSPClient库,将RTSP/RTP数据获取到本地,再通过EasyPusher推送到RTSP流媒体服务器;

  • EasyPusher_Win:支持本地摄像头和声卡、RTSP流、屏幕捕获、MP4文件通过EasyPusher推送到RTSP流媒体服务器;

    Windows编译方法,

      Visual Studio 2010 编译:./EasyPusher-master/win/EasyPusher.sln
    

    Linux编译方法,

      chmod +x ./Buildit
      ./Buildit
    

    调用提示:目前的调用示例程序,可以接收参数,具体参数的使用,请在调用时增加**-h**命令查阅,EasyPusher_File示例需要将本地文件copy到可执行文件同目录!

    支持平台芯片位置名称
    Windowsx86./Lib/x86/
    Windowsx64./Lib/x64/
    Linuxx86./Lib/x86/
    Linuxx64./Lib/x64/
    海思arm-hisiv100-linux./Lib/hisiv100/
    海思arm-hisiv200-linux./Lib/hisiv200/
    海思arm-hisiv300-linux./Lib/hisiv300/
    海思arm-hisiv400-linux./Lib/hisiv400/
    海思arm-hisiv500-linux./Lib/hisiv500/
    海思arm-hisiv600-linux./Lib/hisiv600/
    Androidarm./Lib/Android/arm/libeasypusher.a
    Androidarm64./Lib/Android/arm64/libeasypusher.a
    Androidx86./Lib/Android/x86/libeasypusher.a
    Androidx86_64./Lib/Android/x86_64/libeasypusher.a
    Androidmips./Lib/Android/mips/libeasypusher.a
    Androidmips64./Lib/Android/mips64/libeasypusher.a

调用过程

特殊说明

EasyPusher目前支持的音视频格式:

/* 视频编码 */
#define EASY_SDK_VIDEO_CODEC_H264	0x01000001		/* H264  */
#define	EASY_SDK_VIDEO_CODEC_MJPEG	0x01000002		/* MJPEG */
#define	EASY_SDK_VIDEO_CODEC_MPEG4	0x01000004		/* MPEG4 */

/* 音频编码 */
#define EASY_SDK_AUDIO_CODEC_AAC	0x01000011		/* AAC */
#define EASY_SDK_AUDIO_CODEC_G711A	0x01000012		/* G711 alaw*/
#define EASY_SDK_AUDIO_CODEC_G711U	0x01000014		/* G711 ulaw*/

EasyPusher回调事件定义:

typedef enum __EASY_PUSH_STATE_T
{
    EASY_PUSH_STATE_CONNECTING   =   1,     /* 连接中 */
    EASY_PUSH_STATE_CONNECTED,              /* 连接成功 */
    EASY_PUSH_STATE_CONNECT_FAILED,         /* 连接失败 */
    EASY_PUSH_STATE_CONNECT_ABORT,          /* 连接异常中断 */
    EASY_PUSH_STATE_PUSHING,                /* 推流中 */
    EASY_PUSH_STATE_DISCONNECTED,           /* 断开连接 */
    EASY_PUSH_STATE_ERROR
}EASY_PUSH_STATE_T;

版本下载

EasyPusher_Android

EasyPusher_iOS

技术支持

  • EasyPusher完全免费使用的,技术交流直接到QQ群:465901074,交流意见!

获取更多信息

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

Copyright © EasyDarwin Team 2012-2019

EasyDarwin

评论

暂无评论