EasyRTSPServer开源RTSP流媒体服务器(Based on live555)

应用介绍

功能概要:
  • 功能概述:EasyRTSPServer是由EasyDarwin开源社区开发的一套非常稳定、易用、支持多种平台(包括Windows/Linux 32&64,Android,ARM等平台的RTSP Server开源项目,适用于IPCamera、NVR、编码器、安卓监控设备等软硬件产品,接口调用非常简单成熟,调用者无需关注RTSP Server中关于客户端监听接入、音视频多路复用、RTSP具体流程、RTP打包与发送等相关问题,支持多种音视频格式,再也不用像调用live555 RTSPServer那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的复杂流程和担心内存释放的问题了!EasyRTSPServer非常适合于安防领域、教育领域、互联网直播等领域; 
  • 操作系统:任意;


EasyRTSPServer是由EasyDarwin开源社区开发的一套非常稳定、易用、支持多种平台(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv300/hisiv400/hisiv500/hisiv600等平台)的RTSP Server组件,适用于IPCamera、NVR、编码器、安卓监控设备等软硬件产品,接口调用非常简单成熟,调用者无需关注RTSP Server中关于客户端监听接入、音视频多路复用、RTSP具体流程、RTP打包与发送等相关问题,支持多种音视频格式,再也不用像调用live555 RTSPServer那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的复杂流程和担心内存释放的问题了!EasyIPCamera非常适合于安防领域、教育领域、互联网直播等领域;

BTW:EasyRTSPServer非常适合在海思系列芯片上运行,性能以及稳定性都非常优秀,并发方面,稳定保持在20路1080P并发:

  • TCP/UDP 方式分别连接20路下,1080P 4M 定码率,音频格式G711(64K)G726(16K 24K 32K 40K)AAC(64K 96K 128K)都没问题;

  • 支持Basic、Digest两种鉴权模式;

功能支持

  • 标准、稳定运行的RTSP/RTP服务;
  • 支持RTP over UDP/RTP over TCP;
  • 视频编码格式支持:H.264、H.265;
  • 音频编码格式支持:G.711A、G.711U、G.726、AAC;
  • 支持标准RTSP鉴权认证;
  • 灵活的调用接口支持;
  • 丰富的接口调用示例;

设计方法

EasyRTSPServer参考live555 testProg中的testOnDemandRTSPServer示例程序,将一个live555 testOnDemandRTSPServer封装在一个类中,例如,我们称为Class EasyRTSPServer,在EasyRTSPServerCreate接口调用时,我们新建一个EasyRTSPServer对象,再通过调用EasyRTSPServerStartup接口,将EasyRTSPServer RTSPServer所需要的监听端口、认证信息、通道信息等参数输入到EasyRTSPServer中后,EasyRTSPServer就正式开始建立监听对外服务了,在服务的过程中,当有客户端的连接或断开,都会以回调事件的形式,通知给Controller调用者,调用者再具体来处理相关的回调任务,返回给EasyRTSPServer,在EasyRTSPServer服务的过程当中,如果回调要求需要Controller调用者提供音视频数据帧,Controller调用者可以通过EasyRTSPServer_PushFrame接口,向EasyRTSPServer输送具体的音视频帧数据,当调用者需要结束RTSPServer服务,只需要调用EasyRTSPServerShutdown停止服务,再调用EasyRTSPServerRelease释放EasyRTSPServer就可以了,这样整个服务过程就完整了!

EasyRTSPServer接口设计

/* 启动 RTSP Server: 设置监听端口, 回调函数及自定义数据  */
/*
listenPort: 监听端口
realm: 服务端标识
authType: 用户验证类型, 可选择不验证、Basic、Digest三种;
username: 验证用户名   用户名和密码还可使用EasyRtspServer_AddUser添加或EasyRtspServer_DelUser删除
password: 验证密码
callback: 回调函数
userPtr:  用户自定义指针
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_Startup(Easy_U16 listenPort, const char *realm, EASY_AUTHENTICATION_TYPE_ENUM authType, const char *username, const char *password, EasyRtspServer_Callback callback, void *userPtr);
//终止 RTSP Server  ####### 务必在关闭所有源后调用该函数 ######## 
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_Shutdown();

//创建通道     此函数在回调函数中调用
/*
resourceName: 同回调函数中的resourceName
channelHandle: 返回的通道句柄
channelPtr:    通道自定义指针
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_CreateChannel(const char *resourceName,  EASY_CHANNEL_HANDLE *channelHandle, void *channelPtr);
//推送媒体数据 不需要StartCode(0x00 0x00 0x00 0x01)
/*
channelHandle: 使用EasyRtspServer_CreateChannel创建的通道句柄
mediaType: 媒体类型
frameInfo: 帧信息
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_PushFrame(EASY_CHANNEL_HANDLE channelHandle, EASY_AV_Frame *frame);
//删除通道 此函数在回调函数中调用
/*
channelHandle: 使用EasyRtspServer_CreateChannel创建的通道句柄
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_DeleteChannel(EASY_CHANNEL_HANDLE *channelHandle);

//复位通道 分辨率变化 只要视频或音频参数变化时, 调用 EasyRtspServer_ResetChannel
/*
channelHandle: 使用EasyRtspServer_CreateChannel创建的通道句柄
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_ResetChannel(EASY_CHANNEL_HANDLE channelHandle);

//添加用户  或    根据用户名修改用户密码
//如果添加的用户名不存在,则为新增, 如已存在,则为修改密码
/*
username:  待添加的用户名
clientNum: 用户名对应的密码
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_AddUser(const Easy_U8 *username, const Easy_U8 *password);
//删除用户
/*
username:  待删除的用户名
*/
Easy_API Easy_I32 Easy_APICALL EasyRtspServer_DelUser(const Easy_U8 *username);


EasyRTSPServer支持数据格式说明

EASY_SDK_VIDEO_FRAME_FLAG数据可支持多种视频格式:

#define EASY_SDK_VIDEO_CODEC_H265           /* H265  */
#define EASY_SDK_VIDEO_CODEC_H264           /* H264  */
#define EASY_SDK_VIDEO_CODEC_MJPEG          /* MJPEG */
#define EASY_SDK_VIDEO_CODEC_MPEG4          /* MPEG4 */

视频帧标识支持

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

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

#define EASY_SDK_AUDIO_CODEC_AAC            /* AAC */
#define EASY_SDK_AUDIO_CODEC_G711A          /* G711 alaw*/
#define EASY_SDK_AUDIO_CODEC_G711U          /* G711 ulaw*/
#define EASY_SDK_AUDIO_CODEC_G726           /* G726 */

目录说明

./src/目录主要为EasyRTSPServer核心源代码,通过此目录可以定向编译出各个不同平台的libEasyRTSPServer SDK,然后再被主程序调用;

./demo/目录中有EasyRTSPServer的调用示例,其主要功能是通过RTSP拉流的方式将外部实时流输入给EasyRTSPServer,进行多路的RTSP流分发输出,作用等同于NVR的作用;


点赞(18)

立即下载

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部