Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
7e255379
Commit
7e255379
authored
Feb 13, 2020
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
流量汇报事件添加客户端ip和端口参数
parent
ead8b5a8
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
34 行增加
和
15 行删除
+34
-15
api/include/mk_events.h
+5
-1
api/source/mk_events.cpp
+3
-1
api/tests/server.c
+7
-3
server/WebHook.cpp
+3
-1
src/Common/config.h
+1
-1
src/Http/HttpFileManager.cpp
+5
-2
src/Http/HttpSession.cpp
+1
-1
src/Record/HlsMediaSource.cpp
+4
-2
src/Record/HlsMediaSource.h
+3
-1
src/Rtmp/RtmpSession.cpp
+1
-1
src/Rtsp/RtspSession.cpp
+1
-1
没有找到文件。
api/include/mk_events.h
查看文件 @
7e255379
...
...
@@ -162,11 +162,15 @@ typedef struct {
* @param total_bytes 耗费上下行总流量,单位字节数
* @param total_seconds 本次tcp会话时长,单位秒
* @param is_player 客户端是否为播放器
* @param peer_ip 客户端ip
* @param peer_port 客户端端口号
*/
void
(
API_CALL
*
on_mk_flow_report
)(
const
mk_media_info
url_info
,
uint64_t
total_bytes
,
uint64_t
total_seconds
,
int
is_player
);
int
is_player
,
const
char
*
peer_ip
,
uint16_t
peer_port
);
}
mk_events
;
...
...
api/source/mk_events.cpp
查看文件 @
7e255379
...
...
@@ -151,7 +151,9 @@ API_EXPORT void API_CALL mk_events_listen(const mk_events *events){
s_events
.
on_mk_flow_report
((
mk_media_info
)
&
args
,
totalBytes
,
totalDuration
,
isPlayer
);
isPlayer
,
peerIP
.
c_str
(),
peerPort
);
}
});
...
...
api/tests/server.c
查看文件 @
7e255379
...
...
@@ -372,19 +372,23 @@ void API_CALL on_mk_shell_login(const char *user_name,
* @param total_bytes 耗费上下行总流量,单位字节数
* @param total_seconds 本次tcp会话时长,单位秒
* @param is_player 客户端是否为播放器
* @param peer_ip 客户端ip
* @param peer_port 客户端端口号
*/
void
API_CALL
on_mk_flow_report
(
const
mk_media_info
url_info
,
uint64_t
total_bytes
,
uint64_t
total_seconds
,
int
is_player
)
{
int
is_player
,
const
char
*
peer_ip
,
uint16_t
peer_port
)
{
log_printf
(
LOG_LEV
,
"%s/%s/%s/%s, url params: %s,"
"total_bytes: %d, total_seconds: %d, is_player: %d"
,
"total_bytes: %d, total_seconds: %d, is_player: %d
, peer_ip:%s, peer_port:%d
"
,
mk_media_info_get_schema
(
url_info
),
mk_media_info_get_vhost
(
url_info
),
mk_media_info_get_app
(
url_info
),
mk_media_info_get_stream
(
url_info
),
mk_media_info_get_params
(
url_info
),
(
int
)
total_bytes
,
(
int
)
total_seconds
,
(
int
)
is_player
);
(
int
)
total_bytes
,
(
int
)
total_seconds
,
(
int
)
is_player
,
peer_ip
,
(
int
)
peer_port
);
}
static
int
flag
=
1
;
...
...
server/WebHook.cpp
查看文件 @
7e255379
...
...
@@ -269,13 +269,15 @@ void installWebHook(){
});
NoticeCenter
::
Instance
().
addListener
(
nullptr
,
Broadcast
::
kBroadcastFlowReport
,[](
BroadcastFlowReportArgs
){
if
(
!
hook_enable
||
args
.
_param_strs
==
hook_adminparams
||
hook_flowreport
.
empty
()){
if
(
!
hook_enable
||
args
.
_param_strs
==
hook_adminparams
||
hook_flowreport
.
empty
()
||
peerIP
==
"127.0.0.1"
){
return
;
}
auto
body
=
make_json
(
args
);
body
[
"totalBytes"
]
=
(
Json
::
UInt64
)
totalBytes
;
body
[
"duration"
]
=
(
Json
::
UInt64
)
totalDuration
;
body
[
"player"
]
=
isPlayer
;
body
[
"ip"
]
=
peerIP
;
body
[
"port"
]
=
peerPort
;
//执行hook
do_http_hook
(
hook_flowreport
,
body
,
nullptr
);
});
...
...
src/Common/config.h
查看文件 @
7e255379
...
...
@@ -127,7 +127,7 @@ extern const string kBroadcastShellLogin;
//停止rtsp/rtmp/http-flv会话后流量汇报事件广播
extern
const
string
kBroadcastFlowReport
;
#define BroadcastFlowReportArgs const MediaInfo &args,const uint64_t &totalBytes,const uint64_t &totalDuration,const bool &isPlayer
#define BroadcastFlowReportArgs const MediaInfo &args,const uint64_t &totalBytes,const uint64_t &totalDuration,const bool &isPlayer
, const string &peerIP,const uint16_t &peerPort
//未找到流后会广播该事件,请在监听该事件后去拉流或其他方式产生流,这样就能按需拉流了
extern
const
string
kBroadcastNotFoundStream
;
...
...
src/Http/HttpFileManager.cpp
查看文件 @
7e255379
...
...
@@ -378,8 +378,11 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
}
bool
is_hls
=
mediaInfo
.
_schema
==
HLS_SCHEMA
;
string
peer_ip
=
sender
.
get_peer_ip
();
uint16_t
peer_port
=
sender
.
get_peer_port
();
//该用户从来未获取过cookie,这个时候我们广播是否允许该用户访问该http目录
HttpSession
::
HttpAccessPathInvoker
accessPathInvoker
=
[
callback
,
uid
,
path
,
is_dir
,
is_hls
,
mediaInfo
]
HttpSession
::
HttpAccessPathInvoker
accessPathInvoker
=
[
callback
,
uid
,
path
,
is_dir
,
is_hls
,
mediaInfo
,
peer_ip
,
peer_port
]
(
const
string
&
errMsg
,
const
string
&
cookie_path_in
,
int
cookieLifeSecond
)
{
HttpServerCookie
::
Ptr
cookie
;
if
(
cookieLifeSecond
)
{
...
...
@@ -402,7 +405,7 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
attachment
.
_is_hls
=
is_hls
;
if
(
is_hls
){
//hls相关信息
attachment
.
_hls_data
=
std
::
make_shared
<
HlsCookieData
>
(
mediaInfo
);
attachment
.
_hls_data
=
std
::
make_shared
<
HlsCookieData
>
(
mediaInfo
,
peer_ip
,
peer_port
);
//hls未查找MediaSource
attachment
.
_have_find_media_source
=
false
;
}
...
...
src/Http/HttpSession.cpp
查看文件 @
7e255379
...
...
@@ -112,7 +112,7 @@ void HttpSession::onError(const SockException& err) {
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
true
);
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
true
,
get_peer_ip
(),
get_peer_port
()
);
}
return
;
}
...
...
src/Record/HlsMediaSource.cpp
查看文件 @
7e255379
...
...
@@ -28,8 +28,10 @@
namespace
mediakit
{
HlsCookieData
::
HlsCookieData
(
const
MediaInfo
&
info
)
{
HlsCookieData
::
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
peer_ip
,
uint16_t
peer_port
)
{
_info
=
info
;
_peer_ip
=
peer_ip
;
_peer_port
=
peer_port
;
_added
=
std
::
make_shared
<
bool
>
(
false
);
addReaderCount
();
}
...
...
@@ -61,7 +63,7 @@ HlsCookieData::~HlsCookieData() {
WarnL
<<
"HLS播放器("
<<
_info
.
_vhost
<<
"/"
<<
_info
.
_app
<<
"/"
<<
_info
.
_streamid
<<
")断开,播放时间:"
<<
duration
;
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_bytes
>
iFlowThreshold
*
1024
)
{
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_info
,
_bytes
,
duration
,
true
);
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_info
,
_bytes
,
duration
,
true
,
_peer_ip
,
_peer_port
);
}
}
}
...
...
src/Record/HlsMediaSource.h
查看文件 @
7e255379
...
...
@@ -92,7 +92,7 @@ private:
class
HlsCookieData
{
public
:
typedef
std
::
shared_ptr
<
HlsCookieData
>
Ptr
;
HlsCookieData
(
const
MediaInfo
&
info
);
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
peer_ip
,
uint16_t
peer_port
);
~
HlsCookieData
();
void
addByteUsage
(
uint64_t
bytes
);
private
:
...
...
@@ -100,6 +100,8 @@ private:
private
:
uint64_t
_bytes
=
0
;
MediaInfo
_info
;
string
_peer_ip
;
uint16_t
_peer_port
;
std
::
shared_ptr
<
bool
>
_added
;
weak_ptr
<
HlsMediaSource
>
_src
;
Ticker
_ticker
;
...
...
src/Rtmp/RtmpSession.cpp
查看文件 @
7e255379
...
...
@@ -55,7 +55,7 @@ void RtmpSession::onError(const SockException& err) {
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
);
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
,
get_peer_ip
(),
get_peer_port
()
);
}
}
...
...
src/Rtsp/RtspSession.cpp
查看文件 @
7e255379
...
...
@@ -106,7 +106,7 @@ void RtspSession::onError(const SockException& err) {
//流量统计事件广播
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
);
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
,
get_peer_ip
(),
get_peer_port
()
);
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论