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
a7a376b3
Commit
a7a376b3
authored
Feb 13, 2020
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
流量汇报事件添加id参数
parent
7e255379
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
32 行增加
和
16 行删除
+32
-16
.gitignore
+3
-0
3rdpart/ZLToolKit
+1
-1
server/WebHook.cpp
+1
-0
src/Common/config.h
+1
-1
src/Http/HttpFileManager.cpp
+3
-2
src/Http/HttpSession.cpp
+4
-2
src/Record/HlsMediaSource.cpp
+8
-4
src/Record/HlsMediaSource.h
+2
-1
src/Rtmp/RtmpSession.cpp
+5
-3
src/Rtsp/RtspSession.cpp
+4
-2
没有找到文件。
.gitignore
查看文件 @
a7a376b3
...
@@ -41,3 +41,6 @@
...
@@ -41,3 +41,6 @@
/Android/.idea/
/Android/.idea/
/Android/app/src/main/cpp/libs_export/
/Android/app/src/main/cpp/libs_export/
/3rdpart/media-server/.idea/
/3rdpart/media-server/.idea/
/3rdpart/media-server/.idea/
/build/
/3rdpart/media-server/.idea/
ZLToolKit
@
ca6ab8b4
Subproject commit
8eaecbd6dd8bed0bee6a61168255653127a20a43
Subproject commit
ca6ab8b4c406c3c2e91ca0979c843908d1edb4bd
server/WebHook.cpp
查看文件 @
a7a376b3
...
@@ -278,6 +278,7 @@ void installWebHook(){
...
@@ -278,6 +278,7 @@ void installWebHook(){
body
[
"player"
]
=
isPlayer
;
body
[
"player"
]
=
isPlayer
;
body
[
"ip"
]
=
peerIP
;
body
[
"ip"
]
=
peerIP
;
body
[
"port"
]
=
peerPort
;
body
[
"port"
]
=
peerPort
;
body
[
"id"
]
=
sessionIdentifier
;
//执行hook
//执行hook
do_http_hook
(
hook_flowreport
,
body
,
nullptr
);
do_http_hook
(
hook_flowreport
,
body
,
nullptr
);
});
});
...
...
src/Common/config.h
查看文件 @
a7a376b3
...
@@ -127,7 +127,7 @@ extern const string kBroadcastShellLogin;
...
@@ -127,7 +127,7 @@ extern const string kBroadcastShellLogin;
//停止rtsp/rtmp/http-flv会话后流量汇报事件广播
//停止rtsp/rtmp/http-flv会话后流量汇报事件广播
extern
const
string
kBroadcastFlowReport
;
extern
const
string
kBroadcastFlowReport
;
#define BroadcastFlowReportArgs const MediaInfo &args,const uint64_t &totalBytes,const uint64_t &totalDuration,const bool &isPlayer, const string &peerIP,const uint16_t &peerPort
#define BroadcastFlowReportArgs const MediaInfo &args,const uint64_t &totalBytes,const uint64_t &totalDuration,const bool &isPlayer, const string &
sessionIdentifier, const string &
peerIP,const uint16_t &peerPort
//未找到流后会广播该事件,请在监听该事件后去拉流或其他方式产生流,这样就能按需拉流了
//未找到流后会广播该事件,请在监听该事件后去拉流或其他方式产生流,这样就能按需拉流了
extern
const
string
kBroadcastNotFoundStream
;
extern
const
string
kBroadcastNotFoundStream
;
...
...
src/Http/HttpFileManager.cpp
查看文件 @
a7a376b3
...
@@ -378,11 +378,12 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
...
@@ -378,11 +378,12 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
}
}
bool
is_hls
=
mediaInfo
.
_schema
==
HLS_SCHEMA
;
bool
is_hls
=
mediaInfo
.
_schema
==
HLS_SCHEMA
;
string
identifier
=
sender
.
getIdentifier
();
string
peer_ip
=
sender
.
get_peer_ip
();
string
peer_ip
=
sender
.
get_peer_ip
();
uint16_t
peer_port
=
sender
.
get_peer_port
();
uint16_t
peer_port
=
sender
.
get_peer_port
();
//该用户从来未获取过cookie,这个时候我们广播是否允许该用户访问该http目录
//该用户从来未获取过cookie,这个时候我们广播是否允许该用户访问该http目录
HttpSession
::
HttpAccessPathInvoker
accessPathInvoker
=
[
callback
,
uid
,
path
,
is_dir
,
is_hls
,
mediaInfo
,
peer_ip
,
peer_port
]
HttpSession
::
HttpAccessPathInvoker
accessPathInvoker
=
[
callback
,
uid
,
path
,
is_dir
,
is_hls
,
mediaInfo
,
identifier
,
peer_ip
,
peer_port
]
(
const
string
&
errMsg
,
const
string
&
cookie_path_in
,
int
cookieLifeSecond
)
{
(
const
string
&
errMsg
,
const
string
&
cookie_path_in
,
int
cookieLifeSecond
)
{
HttpServerCookie
::
Ptr
cookie
;
HttpServerCookie
::
Ptr
cookie
;
if
(
cookieLifeSecond
)
{
if
(
cookieLifeSecond
)
{
...
@@ -405,7 +406,7 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
...
@@ -405,7 +406,7 @@ static void canAccessPath(TcpSession &sender, const Parser &parser, const MediaI
attachment
.
_is_hls
=
is_hls
;
attachment
.
_is_hls
=
is_hls
;
if
(
is_hls
){
if
(
is_hls
){
//hls相关信息
//hls相关信息
attachment
.
_hls_data
=
std
::
make_shared
<
HlsCookieData
>
(
mediaInfo
,
peer_ip
,
peer_port
);
attachment
.
_hls_data
=
std
::
make_shared
<
HlsCookieData
>
(
mediaInfo
,
identifier
,
peer_ip
,
peer_port
);
//hls未查找MediaSource
//hls未查找MediaSource
attachment
.
_have_find_media_source
=
false
;
attachment
.
_have_find_media_source
=
false
;
}
}
...
...
src/Http/HttpSession.cpp
查看文件 @
a7a376b3
...
@@ -103,16 +103,18 @@ void HttpSession::onRecv(const Buffer::Ptr &pBuf) {
...
@@ -103,16 +103,18 @@ void HttpSession::onRecv(const Buffer::Ptr &pBuf) {
void
HttpSession
::
onError
(
const
SockException
&
err
)
{
void
HttpSession
::
onError
(
const
SockException
&
err
)
{
if
(
_is_flv_stream
){
if
(
_is_flv_stream
){
uint64_t
duration
=
_ticker
.
createdTime
()
/
1000
;
//flv播放器
//flv播放器
WarnP
(
this
)
<<
"FLV播放器("
WarnP
(
this
)
<<
"FLV播放器("
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_streamid
<<
_mediaInfo
.
_streamid
<<
")断开:"
<<
err
.
what
();
<<
")断开:"
<<
err
.
what
()
<<
",耗时(s):"
<<
duration
;
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
true
,
get_peer_ip
(),
get_peer_port
());
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
duration
,
true
,
getIdentifier
()
,
get_peer_ip
(),
get_peer_port
());
}
}
return
;
return
;
}
}
...
...
src/Record/HlsMediaSource.cpp
查看文件 @
a7a376b3
...
@@ -28,8 +28,9 @@
...
@@ -28,8 +28,9 @@
namespace
mediakit
{
namespace
mediakit
{
HlsCookieData
::
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
peer_ip
,
uint16_t
peer_port
)
{
HlsCookieData
::
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
sessionIdentifier
,
const
string
&
peer_ip
,
uint16_t
peer_port
)
{
_info
=
info
;
_info
=
info
;
_sessionIdentifier
=
sessionIdentifier
;
_peer_ip
=
peer_ip
;
_peer_ip
=
peer_ip
;
_peer_port
=
peer_port
;
_peer_port
=
peer_port
;
_added
=
std
::
make_shared
<
bool
>
(
false
);
_added
=
std
::
make_shared
<
bool
>
(
false
);
...
@@ -59,11 +60,14 @@ HlsCookieData::~HlsCookieData() {
...
@@ -59,11 +60,14 @@ HlsCookieData::~HlsCookieData() {
if
(
src
)
{
if
(
src
)
{
src
->
modifyReaderCount
(
false
);
src
->
modifyReaderCount
(
false
);
}
}
auto
duration
=
(
_ticker
.
createdTime
()
-
_ticker
.
elapsedTime
())
/
1000
;
uint64_t
duration
=
(
_ticker
.
createdTime
()
-
_ticker
.
elapsedTime
())
/
1000
;
WarnL
<<
"HLS播放器("
<<
_info
.
_vhost
<<
"/"
<<
_info
.
_app
<<
"/"
<<
_info
.
_streamid
<<
")断开,播放时间:"
<<
duration
;
WarnL
<<
_sessionIdentifier
<<
"("
<<
_peer_ip
<<
":"
<<
_peer_port
<<
") "
<<
"HLS播放器("
<<
_info
.
_vhost
<<
"/"
<<
_info
.
_app
<<
"/"
<<
_info
.
_streamid
<<
")断开,耗时(s):"
<<
duration
;
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_bytes
>
iFlowThreshold
*
1024
)
{
if
(
_bytes
>
iFlowThreshold
*
1024
)
{
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_info
,
_bytes
,
duration
,
true
,
_peer_ip
,
_peer_port
);
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_info
,
_bytes
,
duration
,
true
,
_
sessionIdentifier
,
_
peer_ip
,
_peer_port
);
}
}
}
}
}
}
...
...
src/Record/HlsMediaSource.h
查看文件 @
a7a376b3
...
@@ -92,7 +92,7 @@ private:
...
@@ -92,7 +92,7 @@ private:
class
HlsCookieData
{
class
HlsCookieData
{
public
:
public
:
typedef
std
::
shared_ptr
<
HlsCookieData
>
Ptr
;
typedef
std
::
shared_ptr
<
HlsCookieData
>
Ptr
;
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
peer_ip
,
uint16_t
peer_port
);
HlsCookieData
(
const
MediaInfo
&
info
,
const
string
&
sessionIdentifier
,
const
string
&
peer_ip
,
uint16_t
peer_port
);
~
HlsCookieData
();
~
HlsCookieData
();
void
addByteUsage
(
uint64_t
bytes
);
void
addByteUsage
(
uint64_t
bytes
);
private
:
private
:
...
@@ -100,6 +100,7 @@ private:
...
@@ -100,6 +100,7 @@ private:
private
:
private
:
uint64_t
_bytes
=
0
;
uint64_t
_bytes
=
0
;
MediaInfo
_info
;
MediaInfo
_info
;
string
_sessionIdentifier
;
string
_peer_ip
;
string
_peer_ip
;
uint16_t
_peer_port
;
uint16_t
_peer_port
;
std
::
shared_ptr
<
bool
>
_added
;
std
::
shared_ptr
<
bool
>
_added
;
...
...
src/Rtmp/RtmpSession.cpp
查看文件 @
a7a376b3
...
@@ -45,17 +45,19 @@ RtmpSession::~RtmpSession() {
...
@@ -45,17 +45,19 @@ RtmpSession::~RtmpSession() {
void
RtmpSession
::
onError
(
const
SockException
&
err
)
{
void
RtmpSession
::
onError
(
const
SockException
&
err
)
{
bool
isPlayer
=
!
_pPublisherSrc
;
bool
isPlayer
=
!
_pPublisherSrc
;
uint64_t
duration
=
_ticker
.
createdTime
()
/
1000
;
WarnP
(
this
)
<<
(
isPlayer
?
"RTMP播放器("
:
"RTMP推流器("
)
WarnP
(
this
)
<<
(
isPlayer
?
"RTMP播放器("
:
"RTMP推流器("
)
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_streamid
<<
_mediaInfo
.
_streamid
<<
")断开:"
<<
err
.
what
();
<<
")断开:"
<<
err
.
what
()
<<
",耗时(s):"
<<
duration
;
//流量统计事件广播
//流量统计事件广播
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
,
get_peer_ip
(),
get_peer_port
());
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
duration
,
isPlayer
,
getIdentifier
()
,
get_peer_ip
(),
get_peer_port
());
}
}
}
}
...
@@ -206,7 +208,7 @@ void RtmpSession::onCmd_deleteStream(AMFDecoder &dec) {
...
@@ -206,7 +208,7 @@ void RtmpSession::onCmd_deleteStream(AMFDecoder &dec) {
status
.
set
(
"code"
,
"NetStream.Unpublish.Success"
);
status
.
set
(
"code"
,
"NetStream.Unpublish.Success"
);
status
.
set
(
"description"
,
"Stop publishing."
);
status
.
set
(
"description"
,
"Stop publishing."
);
sendReply
(
"onStatus"
,
nullptr
,
status
);
sendReply
(
"onStatus"
,
nullptr
,
status
);
throw
std
::
runtime_error
(
StrPrinter
<<
"Stop publishing
.
"
<<
endl
);
throw
std
::
runtime_error
(
StrPrinter
<<
"Stop publishing"
<<
endl
);
}
}
...
...
src/Rtsp/RtspSession.cpp
查看文件 @
a7a376b3
...
@@ -86,11 +86,13 @@ RtspSession::~RtspSession() {
...
@@ -86,11 +86,13 @@ RtspSession::~RtspSession() {
void
RtspSession
::
onError
(
const
SockException
&
err
)
{
void
RtspSession
::
onError
(
const
SockException
&
err
)
{
bool
isPlayer
=
!
_pushSrc
;
bool
isPlayer
=
!
_pushSrc
;
uint64_t
duration
=
_ticker
.
createdTime
()
/
1000
;
WarnP
(
this
)
<<
(
isPlayer
?
"RTSP播放器("
:
"RTSP推流器("
)
WarnP
(
this
)
<<
(
isPlayer
?
"RTSP播放器("
:
"RTSP推流器("
)
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_vhost
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_app
<<
"/"
<<
_mediaInfo
.
_streamid
<<
_mediaInfo
.
_streamid
<<
")断开:"
<<
err
.
what
();
<<
")断开:"
<<
err
.
what
()
<<
",耗时(s):"
<<
duration
;
if
(
_rtpType
==
Rtsp
::
RTP_MULTICAST
)
{
if
(
_rtpType
==
Rtsp
::
RTP_MULTICAST
)
{
//取消UDP端口监听
//取消UDP端口监听
...
@@ -106,7 +108,7 @@ void RtspSession::onError(const SockException& err) {
...
@@ -106,7 +108,7 @@ void RtspSession::onError(const SockException& err) {
//流量统计事件广播
//流量统计事件广播
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
GET_CONFIG
(
uint32_t
,
iFlowThreshold
,
General
::
kFlowThreshold
);
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
if
(
_ui64TotalBytes
>
iFlowThreshold
*
1024
){
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
_ticker
.
createdTime
()
/
1000
,
isPlayer
,
get_peer_ip
(),
get_peer_port
());
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastFlowReport
,
_mediaInfo
,
_ui64TotalBytes
,
duration
,
isPlayer
,
getIdentifier
()
,
get_peer_ip
(),
get_peer_port
());
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论