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
38a00264
Commit
38a00264
authored
Oct 24, 2020
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复FFmpeg拉流代理功能缺陷的问题:#533
parent
67e49cb6
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
71 行增加
和
24 行删除
+71
-24
server/FFmpegSource.cpp
+4
-10
src/Common/MediaSource.cpp
+24
-2
src/Common/MediaSource.h
+6
-3
src/Common/MultiMediaSourceMuxer.cpp
+2
-2
src/FMP4/FMP4MediaSourceMuxer.h
+1
-1
src/Record/HlsRecorder.h
+1
-1
src/Rtmp/RtmpMediaSourceImp.h
+15
-1
src/Rtmp/RtmpMediaSourceMuxer.h
+1
-1
src/Rtsp/RtspMediaSourceImp.h
+15
-1
src/Rtsp/RtspMediaSourceMuxer.h
+1
-1
src/TS/TSMediaSourceMuxer.h
+1
-1
没有找到文件。
server/FFmpegSource.cpp
查看文件 @
38a00264
...
...
@@ -233,7 +233,7 @@ void FFmpegSource::setOnClose(const function<void()> &cb){
}
bool
FFmpegSource
::
close
(
MediaSource
&
sender
,
bool
force
)
{
auto
listener
=
_listener
.
lock
();
auto
listener
=
getDelegate
();
if
(
listener
&&
!
listener
->
close
(
sender
,
force
)){
//关闭失败
return
false
;
...
...
@@ -258,17 +258,11 @@ std::shared_ptr<SockInfo> FFmpegSource::getOriginSock(MediaSource &sender) const
}
void
FFmpegSource
::
onGetMediaSource
(
const
MediaSource
::
Ptr
&
src
)
{
auto
listener
=
src
->
getListener
();
auto
listener
=
src
->
getListener
(
true
);
if
(
listener
.
lock
().
get
()
!=
this
)
{
//防止多次进入onGetMediaSource函数导致无
效
递归调用的bug
_listener
=
listener
;
//防止多次进入onGetMediaSource函数导致无
限
递归调用的bug
setDelegate
(
listener
)
;
src
->
setListener
(
shared_from_this
());
}
else
{
WarnL
<<
"多次触发onGetMediaSource事件:"
<<
src
->
getSchema
()
<<
"/"
<<
src
->
getVhost
()
<<
"/"
<<
src
->
getApp
()
<<
"/"
<<
src
->
getId
();
}
}
...
...
src/Common/MediaSource.cpp
查看文件 @
38a00264
...
...
@@ -92,8 +92,19 @@ void MediaSource::setListener(const std::weak_ptr<MediaSourceEvent> &listener){
_listener
=
listener
;
}
const
std
::
weak_ptr
<
MediaSourceEvent
>&
MediaSource
::
getListener
()
const
{
return
_listener
;
std
::
weak_ptr
<
MediaSourceEvent
>
MediaSource
::
getListener
(
bool
next
)
const
{
if
(
!
next
)
{
return
_listener
;
}
auto
listener
=
dynamic_pointer_cast
<
MediaSourceEventInterceptor
>
(
_listener
.
lock
());
if
(
!
listener
)
{
//不是MediaSourceEventInterceptor对象或者对象已经销毁
return
_listener
;
}
//获取被拦截的对象
auto
next_obj
=
listener
->
getDelegate
();
//有则返回之
return
next_obj
?
next_obj
:
_listener
;
}
int
MediaSource
::
totalReaderCount
(){
...
...
@@ -644,6 +655,17 @@ bool MediaSourceEventInterceptor::stopSendRtp(MediaSource &sender){
return
false
;
}
void
MediaSourceEventInterceptor
::
setDelegate
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
if
(
listener
.
lock
().
get
()
==
this
)
{
throw
std
::
invalid_argument
(
"can not set self as a delegate"
);
}
_listener
=
listener
;
}
std
::
shared_ptr
<
MediaSourceEvent
>
MediaSourceEventInterceptor
::
getDelegate
()
const
{
return
_listener
.
lock
();
}
/////////////////////////////////////FlushPolicy//////////////////////////////////////
static
bool
isFlushAble_default
(
bool
is_video
,
uint64_t
last_stamp
,
uint64_t
new_stamp
,
int
cache_size
)
{
...
...
src/Common/MediaSource.h
查看文件 @
38a00264
...
...
@@ -97,6 +97,9 @@ public:
MediaSourceEventInterceptor
(){}
~
MediaSourceEventInterceptor
()
override
{}
void
setDelegate
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
std
::
shared_ptr
<
MediaSourceEvent
>
getDelegate
()
const
;
MediaOriginType
getOriginType
(
MediaSource
&
sender
)
const
override
;
string
getOriginUrl
(
MediaSource
&
sender
)
const
override
;
std
::
shared_ptr
<
SockInfo
>
getOriginSock
(
MediaSource
&
sender
)
const
override
;
...
...
@@ -112,7 +115,7 @@ public:
void
startSendRtp
(
MediaSource
&
sender
,
const
string
&
dst_url
,
uint16_t
dst_port
,
uint32_t
ssrc
,
bool
is_udp
,
const
function
<
void
(
const
SockException
&
ex
)
>
&
cb
)
override
;
bool
stopSendRtp
(
MediaSource
&
sender
)
override
;
pr
otected
:
pr
ivate
:
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
...
...
@@ -226,9 +229,9 @@ public:
////////////////MediaSourceEvent相关接口实现////////////////
// 设置监听者
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
v
irtual
v
oid
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
// 获取监听者
const
std
::
weak_ptr
<
MediaSourceEvent
>&
getListener
(
)
const
;
std
::
weak_ptr
<
MediaSourceEvent
>
getListener
(
bool
next
=
false
)
const
;
// 本协议获取观看者个数,可能返回本协议的观看人数,也可能返回总人数
virtual
int
readerCount
()
=
0
;
...
...
src/Common/MultiMediaSourceMuxer.cpp
查看文件 @
38a00264
...
...
@@ -291,7 +291,7 @@ MultiMediaSourceMuxer::MultiMediaSourceMuxer(const string &vhost, const string &
}
void
MultiMediaSourceMuxer
::
setMediaListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
_listener
=
listener
;
setDelegate
(
listener
)
;
//拦截事件
_muxer
->
setMediaListener
(
shared_from_this
());
}
...
...
@@ -313,7 +313,7 @@ vector<Track::Ptr> MultiMediaSourceMuxer::getTracks(MediaSource &sender, bool tr
}
int
MultiMediaSourceMuxer
::
totalReaderCount
(
MediaSource
&
sender
)
{
auto
listener
=
_listener
.
lock
();
auto
listener
=
getDelegate
();
if
(
!
listener
)
{
return
totalReaderCount
();
}
...
...
src/FMP4/FMP4MediaSourceMuxer.h
查看文件 @
38a00264
...
...
@@ -32,7 +32,7 @@ public:
~
FMP4MediaSourceMuxer
()
override
=
default
;
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
_listener
=
listener
;
setDelegate
(
listener
)
;
_media_src
->
setListener
(
shared_from_this
());
}
...
...
src/Record/HlsRecorder.h
查看文件 @
38a00264
...
...
@@ -34,7 +34,7 @@ public:
}
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
_listener
=
listener
;
setDelegate
(
listener
)
;
_hls
->
getMediaSource
()
->
setListener
(
shared_from_this
());
//先注册媒体流,后续可以按需生成
_hls
->
getMediaSource
()
->
registHls
(
false
);
...
...
src/Rtmp/RtmpMediaSourceImp.h
查看文件 @
38a00264
...
...
@@ -86,7 +86,7 @@ public:
_muxer
->
setMediaListener
(
getListener
());
_muxer
->
setTrackListener
(
static_pointer_cast
<
RtmpMediaSourceImp
>
(
shared_from_this
()));
//让_muxer对象拦截一部分事件(比如说录像相关事件)
setListener
(
_muxer
);
MediaSource
::
setListener
(
_muxer
);
for
(
auto
&
track
:
_demuxer
->
getTracks
(
false
)){
_muxer
->
addTrack
(
track
);
...
...
@@ -119,6 +119,20 @@ public:
}
}
/**
* 设置事件监听器
* @param listener 监听器
*/
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
override
{
if
(
_muxer
)
{
//_muxer对象不能处理的事件再给listener处理
_muxer
->
setMediaListener
(
listener
);
}
else
{
//未创建_muxer对象,事件全部给listener处理
MediaSource
::
setListener
(
listener
);
}
}
private
:
bool
_all_track_ready
=
false
;
bool
_recreate_metadata
=
false
;
...
...
src/Rtmp/RtmpMediaSourceMuxer.h
查看文件 @
38a00264
...
...
@@ -32,7 +32,7 @@ public:
~
RtmpMediaSourceMuxer
()
override
{}
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
_listener
=
listener
;
setDelegate
(
listener
)
;
_media_src
->
setListener
(
shared_from_this
());
}
...
...
src/Rtsp/RtspMediaSourceImp.h
查看文件 @
38a00264
...
...
@@ -77,7 +77,7 @@ public:
_muxer
->
setMediaListener
(
getListener
());
_muxer
->
setTrackListener
(
static_pointer_cast
<
RtspMediaSourceImp
>
(
shared_from_this
()));
//让_muxer对象拦截一部分事件(比如说录像相关事件)
setListener
(
_muxer
);
MediaSource
::
setListener
(
_muxer
);
for
(
auto
&
track
:
_demuxer
->
getTracks
(
false
)){
_muxer
->
addTrack
(
track
);
...
...
@@ -102,6 +102,20 @@ public:
_all_track_ready
=
true
;
}
/**
* 设置事件监听器
* @param listener 监听器
*/
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
override
{
if
(
_muxer
)
{
//_muxer对象不能处理的事件再给listener处理
_muxer
->
setMediaListener
(
listener
);
}
else
{
//未创建_muxer对象,事件全部给listener处理
MediaSource
::
setListener
(
listener
);
}
}
private
:
RtspDemuxer
::
Ptr
_demuxer
;
MultiMediaSourceMuxer
::
Ptr
_muxer
;
...
...
src/Rtsp/RtspMediaSourceMuxer.h
查看文件 @
38a00264
...
...
@@ -32,7 +32,7 @@ public:
~
RtspMediaSourceMuxer
()
override
{}
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
_listener
=
listener
;
setDelegate
(
listener
)
;
_media_src
->
setListener
(
shared_from_this
());
}
...
...
src/TS/TSMediaSourceMuxer.h
查看文件 @
38a00264
...
...
@@ -31,7 +31,7 @@ public:
~
TSMediaSourceMuxer
()
override
=
default
;
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
_listener
=
listener
;
setDelegate
(
listener
)
;
_media_src
->
setListener
(
shared_from_this
());
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论