From 98f8024409bab4b45ed5c133ef32eb1dc1307f21 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 7 Sep 2018 16:28:58 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZLToolKit | 2 +- src/Common/config.h | 2 +- src/Rtsp/RtspSession.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ZLToolKit b/ZLToolKit index e3d2a2eb..93ffa60c 160000 --- a/ZLToolKit +++ b/ZLToolKit @@ -1 +1 @@ -Subproject commit e3d2a2eb5d7b816b28f308eac8c53d147db80533 +Subproject commit 93ffa60c4256564728c69311bcd4091cca479152 diff --git a/src/Common/config.h b/src/Common/config.h index dab730ab..da21898e 100644 --- a/src/Common/config.h +++ b/src/Common/config.h @@ -88,7 +88,7 @@ extern const char kBroadcastOnGetRtspRealm[]; //请求认证用户密码事件,user_name为用户名,must_no_encrypt如果为true,则必须提供明文密码(因为此时是base64认证方式),否则会导致认证失败 //获取到密码后请调用invoker并输入对应类型的密码和密码类型,invoker执行时会匹配密码 extern const char kBroadcastOnRtspAuth[]; -#define BroadcastOnRtspAuthArgs const string &user_name,const bool &must_no_encrypt,const RtspSession::onAuth &invoker,TcpSession &sender +#define BroadcastOnRtspAuthArgs const MediaInfo &args,const string &user_name,const bool &must_no_encrypt,const RtspSession::onAuth &invoker,TcpSession &sender //鉴权结果回调对象 //如果errMessage为空则代表鉴权成功 diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index 71f658d5..19a0548b 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -1,4 +1,4 @@ -/* +/* * MIT License * * Copyright (c) 2016 xiongziliang <771730766@qq.com> @@ -338,7 +338,7 @@ void RtspSession::onAuthBasic(const weak_ptr &weakSelf,const string } //此时必须提供明文密码 - if(!NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastOnRtspAuth,user, true,invoker,*strongSelf)){ + if(!NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastOnRtspAuth,strongSelf->m_mediaInfo,user, true,invoker,*strongSelf)){ //表明该流需要认证却没监听请求密码事件,这一般是大意的程序所为,警告之 WarnL << "请监听kBroadcastOnRtspAuth事件!"; //但是我们还是忽略认证以便完成播放 @@ -419,7 +419,7 @@ void RtspSession::onAuthDigest(const weak_ptr &weakSelf,const strin }; //此时可以提供明文或md5加密的密码 - if(!NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastOnRtspAuth,username, false,invoker,*strongSelf)){ + if(!NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastOnRtspAuth,strongSelf->m_mediaInfo,username, false,invoker,*strongSelf)){ //表明该流需要认证却没监听请求密码事件,这一般是大意的程序所为,警告之 WarnL << "请监听kBroadcastOnRtspAuth事件!"; //但是我们还是忽略认证以便完成播放 From 6c97338712b7a35e575fc217510f47376373b281 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 7 Sep 2018 16:35:17 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/config.h | 2 +- src/Rtsp/RtspSession.cpp | 3 +-- tests/test_server.cpp | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Common/config.h b/src/Common/config.h index da21898e..3bbcca60 100644 --- a/src/Common/config.h +++ b/src/Common/config.h @@ -83,7 +83,7 @@ extern const char kBroadcastHttpRequest[]; //该流是否需要认证?是的话调用invoker并传入realm,否则传入空的realm.如果该事件不监听则不认证 extern const char kBroadcastOnGetRtspRealm[]; -#define BroadcastOnGetRtspRealmArgs const string &app,const string &stream,const RtspSession::onGetRealm &invoker,TcpSession &sender +#define BroadcastOnGetRtspRealmArgs const MediaInfo &args,const RtspSession::onGetRealm &invoker,TcpSession &sender //请求认证用户密码事件,user_name为用户名,must_no_encrypt如果为true,则必须提供明文密码(因为此时是base64认证方式),否则会导致认证失败 //获取到密码后请调用invoker并输入对应类型的密码和密码类型,invoker执行时会匹配密码 diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index 19a0548b..2c783ae3 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -226,8 +226,7 @@ bool RtspSession::handleReq_Describe() { //广播是否需要认证事件 if(!NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastOnGetRtspRealm, - m_mediaInfo.m_app, - m_mediaInfo.m_streamid, + m_mediaInfo, invoker, *this)){ //无人监听此事件,说明无需认证 diff --git a/tests/test_server.cpp b/tests/test_server.cpp index 122f9677..0f85e6ee 100644 --- a/tests/test_server.cpp +++ b/tests/test_server.cpp @@ -64,7 +64,7 @@ using namespace ZL::Network; static onceToken s_token([](){ NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastOnGetRtspRealm,[](BroadcastOnGetRtspRealmArgs){ - if(string("1") == stream ){ + if(string("1") == args.m_streamid ){ // live/1需要认证 EventPoller::Instance().async([invoker](){ //该流需要认证,并且设置realm From 717779029ef17131ec875bb319bfbebc73fdc9e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E6=A5=9A?= <771730766@qq.com> Date: Fri, 7 Sep 2018 17:24:34 +0800 Subject: [PATCH 3/6] Update README.md --- README.md | 54 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index eb575f61..54a3c00e 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,19 @@ # 一个基于C++11简单易用的轻量级流媒体库 -平台|编译状态 -----|------- -Linux | [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit) -macOS | [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit_build_for_mac.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit_build_for_mac) -iOS | [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit-build_for_ios.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit-build_for_ios) -Android | [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit_build_for_android.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit_build_for_android) -Windows | 已经完成移植 + [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit) ## 项目特点 - 基于C++11开发,避免使用裸指针,代码稳定可靠;同时跨平台移植简单方便,代码清晰简洁。 - 打包多种流媒体协议(RTSP/RTMP/HLS),支持协议间的互相转换,提供一站式的服务。 - 使用epoll+线程池+异步网络IO模式开发,并发性能优越。 - 只实现主流的的H264+AAC流媒体方案,代码精简,脉络清晰,适合学习。 +- 代码经过大量的稳定性、性能测试,可满足商用服务器项目。 +- 支持linux、macos、ios、android、windows平台 + +## 项目定位 +- 移动嵌入式跨平台流媒体解决方案。 +- 商用级流媒体服务器。 +- 网络编程二次开发SDK。 + ## 功能清单 - RTSP @@ -44,6 +46,9 @@ Windows | 已经完成移植 - 支持配置文件热加载 - 支持流量统计、推流播放鉴权等事件 - 支持rtsp/rtmp/http虚拟主机 + - 支持flv、mp4文件录制 + - 支持rtps/rtmp点播,支持seek + ## 后续任务 - 添加rtsp推流功能 @@ -202,17 +207,9 @@ Windows | 已经完成移植 ## QA - 怎么测试服务器性能? - ZLMediaKit提供了测试性能的示例,代码在tests/test_benchmark.cpp。由于ZLToolKit默认关闭了tcp客户端多线程的支持,如果需要提高测试并发量,需要在编译ZLToolKit时启用ENABLE_ASNC_TCP_CLIENT宏,具体操作如下: - ``` - #编译ZLToolKit - cd ZLToolKit - mkdir -p build - cd build - cmake .. -DENABLE_ASNC_TCP_CLIENT - make -j4 - sudo make install - ``` - 这里是测试报告:[benchmark.md](https://github.com/xiongziliang/ZLMediaKit/blob/master/benchmark.md) + ZLMediaKit提供了测试性能的示例,代码在tests/test_benchmark.cpp。 + + 这里是测试报告:[benchmark.md](https://github.com/xiongziliang/ZLMediaKit/blob/master/benchmark.md) - github下载太慢了,有其他下载方式吗? @@ -227,8 +224,23 @@ Windows | 已经完成移植 - [IOS rtmp/rtsp播放器,视频推流器](https://gitee.com/xiahcu/IOSPlayer) - [支持linux、windows、mac的rtmp/rtsp播放器](https://github.com/xiongziliang/ZLMediaPlayer) + 上述工程可能在最新的代码的情况下编译不过,请手动修改 -## 联系方式 -- 邮箱:<771730766@qq.com> -- QQ群:542509000 + +## 授权协议 + +本项目使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 + +## 联系方式 + - 邮箱:<771730766@qq.com> + - QQ群:542509000 + +## 捐赠 +如果本项目能切实帮助您减少重复开发的工作量,您可以在自愿的基础上支持下作者,谢谢! + +[支付宝](https://raw.githubusercontent.com/xiongziliang/other/master/IMG_3919.JPG) + +[微信](https://raw.githubusercontent.com/xiongziliang/other/master/IMG_3920.JPG) + + From 76ceeca9648cfa9d856659cd5db285c2f49799b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E6=A5=9A?= <771730766@qq.com> Date: Fri, 7 Sep 2018 17:38:01 +0800 Subject: [PATCH 4/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 54a3c00e..ea6c9fa7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 一个基于C++11简单易用的轻量级流媒体库 +# 高性能运营级流媒体框架 [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit) ## 项目特点 From 3ed2602fd7aa4488bef2e75e615d7f4836860e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E6=A5=9A?= <771730766@qq.com> Date: Fri, 7 Sep 2018 17:38:48 +0800 Subject: [PATCH 5/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea6c9fa7..c99eb679 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 高性能运营级流媒体框架 +# 一个机遇C++11的高性能运营级流媒体服务框架 [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit) ## 项目特点 From 9b8bfe8a66e33400d6ef327ec1154ae047634712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E6=A5=9A?= <771730766@qq.com> Date: Fri, 7 Sep 2018 17:39:02 +0800 Subject: [PATCH 6/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c99eb679..5b9b8efb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 一个机遇C++11的高性能运营级流媒体服务框架 +# 一个基于C++11的高性能运营级流媒体服务框架 [![Build Status](https://travis-ci.org/xiongziliang/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xiongziliang/ZLMediaKit) ## 项目特点