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
ac705972
Commit
ac705972
authored
4 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化getTrack接口相关代码
parent
28262b15
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
34 行增加
和
45 行删除
+34
-45
src/Common/MediaSource.cpp
+12
-8
src/Common/MediaSource.h
+15
-9
src/Common/MultiMediaSourceMuxer.cpp
+1
-9
src/Common/MultiMediaSourceMuxer.h
+3
-5
src/Player/PlayerProxy.cpp
+1
-2
src/Rtmp/RtmpMediaSourceImp.h
+1
-2
src/Rtmp/RtmpMediaSourceMuxer.h
+0
-5
src/Rtsp/RtspMediaSourceImp.h
+1
-1
src/Rtsp/RtspMediaSourceMuxer.h
+0
-4
没有找到文件。
src/Common/MediaSource.cpp
查看文件 @
ac705972
...
@@ -54,15 +54,11 @@ const string& MediaSource::getId() const {
...
@@ -54,15 +54,11 @@ const string& MediaSource::getId() const {
}
}
vector
<
Track
::
Ptr
>
MediaSource
::
getTracks
(
bool
ready
)
const
{
vector
<
Track
::
Ptr
>
MediaSource
::
getTracks
(
bool
ready
)
const
{
auto
strongPtr
=
_track_source
.
lock
();
auto
listener
=
_listener
.
lock
();
if
(
strongPtr
){
if
(
!
listener
){
return
strongPtr
->
getTracks
(
ready
);
}
return
vector
<
Track
::
Ptr
>
();
return
vector
<
Track
::
Ptr
>
();
}
}
return
listener
->
getTracks
(
const_cast
<
MediaSource
&>
(
*
this
),
ready
);
void
MediaSource
::
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
)
{
_track_source
=
track_src
;
}
}
void
MediaSource
::
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
void
MediaSource
::
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
...
@@ -549,6 +545,14 @@ bool MediaSourceEventInterceptor::isRecording(MediaSource &sender, Recorder::typ
...
@@ -549,6 +545,14 @@ bool MediaSourceEventInterceptor::isRecording(MediaSource &sender, Recorder::typ
return
listener
->
isRecording
(
sender
,
type
);
return
listener
->
isRecording
(
sender
,
type
);
}
}
vector
<
Track
::
Ptr
>
MediaSourceEventInterceptor
::
getTracks
(
MediaSource
&
sender
,
bool
trackReady
)
const
{
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
return
vector
<
Track
::
Ptr
>
();
}
return
listener
->
getTracks
(
sender
,
trackReady
);
}
/////////////////////////////////////FlushPolicy//////////////////////////////////////
/////////////////////////////////////FlushPolicy//////////////////////////////////////
static
bool
isFlushAble_default
(
bool
is_video
,
uint32_t
last_stamp
,
uint32_t
new_stamp
,
int
cache_size
)
{
static
bool
isFlushAble_default
(
bool
is_video
,
uint32_t
last_stamp
,
uint32_t
new_stamp
,
int
cache_size
)
{
...
...
This diff is collapsed.
Click to expand it.
src/Common/MediaSource.h
查看文件 @
ac705972
...
@@ -59,6 +59,8 @@ public:
...
@@ -59,6 +59,8 @@ public:
virtual
bool
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
{
return
false
;
};
virtual
bool
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
{
return
false
;
};
// 获取录制状态
// 获取录制状态
virtual
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
{
return
false
;
};
virtual
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
{
return
false
;
};
// 获取所有track相关信息
virtual
vector
<
Track
::
Ptr
>
getTracks
(
MediaSource
&
sender
,
bool
trackReady
=
true
)
const
{
return
vector
<
Track
::
Ptr
>
();
};
private
:
private
:
Timer
::
Ptr
_async_close_timer
;
Timer
::
Ptr
_async_close_timer
;
...
@@ -74,9 +76,10 @@ public:
...
@@ -74,9 +76,10 @@ public:
bool
close
(
MediaSource
&
sender
,
bool
force
)
override
;
bool
close
(
MediaSource
&
sender
,
bool
force
)
override
;
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
override
;
;
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
override
;
bool
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
override
;
bool
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
override
;
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
vector
<
Track
::
Ptr
>
getTracks
(
MediaSource
&
sender
,
bool
trackReady
=
true
)
const
override
;
protected
:
protected
:
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
...
@@ -116,6 +119,8 @@ public:
...
@@ -116,6 +119,8 @@ public:
MediaSource
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream_id
)
;
MediaSource
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream_id
)
;
virtual
~
MediaSource
()
;
virtual
~
MediaSource
()
;
////////////////获取MediaSource相关信息////////////////
// 获取协议类型
// 获取协议类型
const
string
&
getSchema
()
const
;
const
string
&
getSchema
()
const
;
// 虚拟主机
// 虚拟主机
...
@@ -125,11 +130,16 @@ public:
...
@@ -125,11 +130,16 @@ public:
// 流id
// 流id
const
string
&
getId
()
const
;
const
string
&
getId
()
const
;
// 设置TrackSource
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
);
// 获取所有Track
// 获取所有Track
vector
<
Track
::
Ptr
>
getTracks
(
bool
ready
=
true
)
const
override
;
vector
<
Track
::
Ptr
>
getTracks
(
bool
ready
=
true
)
const
override
;
// 获取流当前时间戳
virtual
uint32_t
getTimeStamp
(
TrackType
type
)
{
return
0
;
};
// 设置时间戳
virtual
void
setTimeStamp
(
uint32_t
stamp
)
{};
////////////////MediaSourceEvent相关接口实现////////////////
// 设置监听者
// 设置监听者
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
// 获取监听者
// 获取监听者
...
@@ -140,11 +150,6 @@ public:
...
@@ -140,11 +150,6 @@ public:
// 观看者个数,包括(hls/rtsp/rtmp)
// 观看者个数,包括(hls/rtsp/rtmp)
virtual
int
totalReaderCount
();
virtual
int
totalReaderCount
();
// 获取流当前时间戳
virtual
uint32_t
getTimeStamp
(
TrackType
type
)
{
return
0
;
};
// 设置时间戳
virtual
void
setTimeStamp
(
uint32_t
stamp
)
{};
// 拖动进度条
// 拖动进度条
bool
seekTo
(
uint32_t
stamp
);
bool
seekTo
(
uint32_t
stamp
);
// 关闭该流
// 关闭该流
...
@@ -156,6 +161,8 @@ public:
...
@@ -156,6 +161,8 @@ public:
// 获取录制状态
// 获取录制状态
bool
isRecording
(
Recorder
::
type
type
);
bool
isRecording
(
Recorder
::
type
type
);
////////////////static方法,查找或生成MediaSource////////////////
// 同步查找流
// 同步查找流
static
Ptr
find
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
id
);
static
Ptr
find
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
id
);
// 异步查找流
// 异步查找流
...
@@ -180,7 +187,6 @@ private:
...
@@ -180,7 +187,6 @@ private:
string
_vhost
;
string
_vhost
;
string
_app
;
string
_app
;
string
_stream_id
;
string
_stream_id
;
weak_ptr
<
TrackSource
>
_track_source
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
};
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.cpp
查看文件 @
ac705972
...
@@ -96,7 +96,6 @@ bool MultiMuxerPrivate::setupRecord(MediaSource &sender, Recorder::type type, bo
...
@@ -96,7 +96,6 @@ bool MultiMuxerPrivate::setupRecord(MediaSource &sender, Recorder::type type, bo
if
(
hls_src
)
{
if
(
hls_src
)
{
//设置HlsMediaSource的事件监听器
//设置HlsMediaSource的事件监听器
hls_src
->
setListener
(
_listener
);
hls_src
->
setListener
(
_listener
);
hls_src
->
setTrackSource
(
shared_from_this
());
}
}
}
else
if
(
!
start
&&
_hls
)
{
}
else
if
(
!
start
&&
_hls
)
{
//停止录制
//停止录制
...
@@ -189,19 +188,12 @@ void MultiMuxerPrivate::onTrackFrame(const Frame::Ptr &frame) {
...
@@ -189,19 +188,12 @@ void MultiMuxerPrivate::onTrackFrame(const Frame::Ptr &frame) {
void
MultiMuxerPrivate
::
onAllTrackReady
()
{
void
MultiMuxerPrivate
::
onAllTrackReady
()
{
if
(
_rtmp
)
{
if
(
_rtmp
)
{
_rtmp
->
setTrackSource
(
shared_from_this
());
_rtmp
->
onAllTrackReady
();
_rtmp
->
onAllTrackReady
();
}
}
if
(
_rtsp
)
{
if
(
_rtsp
)
{
_rtsp
->
setTrackSource
(
shared_from_this
());
_rtsp
->
onAllTrackReady
();
_rtsp
->
onAllTrackReady
();
}
}
auto
hls_src
=
getHlsMediaSource
();
if
(
hls_src
)
{
hls_src
->
setTrackSource
(
shared_from_this
());
}
if
(
_track_listener
)
{
if
(
_track_listener
)
{
_track_listener
->
onAllTrackReady
();
_track_listener
->
onAllTrackReady
();
}
}
...
@@ -243,7 +235,7 @@ void MultiMediaSourceMuxer::setTimeStamp(uint32_t stamp) {
...
@@ -243,7 +235,7 @@ void MultiMediaSourceMuxer::setTimeStamp(uint32_t stamp) {
_muxer
->
setTimeStamp
(
stamp
);
_muxer
->
setTimeStamp
(
stamp
);
}
}
vector
<
Track
::
Ptr
>
MultiMediaSourceMuxer
::
getTracks
(
bool
trackReady
)
const
{
vector
<
Track
::
Ptr
>
MultiMediaSourceMuxer
::
getTracks
(
MediaSource
&
sender
,
bool
trackReady
)
const
{
return
_muxer
->
getTracks
(
trackReady
);
return
_muxer
->
getTracks
(
trackReady
);
}
}
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.h
查看文件 @
ac705972
...
@@ -57,7 +57,7 @@ private:
...
@@ -57,7 +57,7 @@ private:
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
};
class
MultiMediaSourceMuxer
:
public
MediaSourceEventInterceptor
,
public
MediaSinkInterface
,
public
TrackSource
,
public
MultiMuxerPrivate
::
Listener
,
public
std
::
enable_shared_from_this
<
MultiMediaSourceMuxer
>
{
class
MultiMediaSourceMuxer
:
public
MediaSourceEventInterceptor
,
public
MediaSinkInterface
,
public
MultiMuxerPrivate
::
Listener
,
public
std
::
enable_shared_from_this
<
MultiMediaSourceMuxer
>
{
public
:
public
:
typedef
MultiMuxerPrivate
::
Listener
Listener
;
typedef
MultiMuxerPrivate
::
Listener
Listener
;
typedef
std
::
shared_ptr
<
MultiMediaSourceMuxer
>
Ptr
;
typedef
std
::
shared_ptr
<
MultiMediaSourceMuxer
>
Ptr
;
...
@@ -94,16 +94,14 @@ public:
...
@@ -94,16 +94,14 @@ public:
*/
*/
void
setTimeStamp
(
uint32_t
stamp
);
void
setTimeStamp
(
uint32_t
stamp
);
/////////////////////////////////
TrackSource
override/////////////////////////////////
/////////////////////////////////
MediaSourceEvent
override/////////////////////////////////
/**
/**
* 获取所有Track
* 获取所有Track
* @param trackReady 是否筛选过滤未就绪的track
* @param trackReady 是否筛选过滤未就绪的track
* @return 所有Track
* @return 所有Track
*/
*/
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackReady
=
true
)
const
override
;
vector
<
Track
::
Ptr
>
getTracks
(
MediaSource
&
sender
,
bool
trackReady
=
true
)
const
override
;
/////////////////////////////////MediaSourceEvent override/////////////////////////////////
/**
/**
* 观看总人数
* 观看总人数
...
...
This diff is collapsed.
Click to expand it.
src/Player/PlayerProxy.cpp
查看文件 @
ac705972
...
@@ -96,7 +96,7 @@ void PlayerProxy::play(const string &strUrlTmp) {
...
@@ -96,7 +96,7 @@ void PlayerProxy::play(const string &strUrlTmp) {
return
;
return
;
}
}
if
(
strongSelf
->
_muxer
)
{
if
(
strongSelf
->
_muxer
)
{
auto
tracks
=
strongSelf
->
getTracks
(
false
);
auto
tracks
=
strongSelf
->
MediaPlayer
::
getTracks
(
false
);
for
(
auto
&
track
:
tracks
){
for
(
auto
&
track
:
tracks
){
track
->
delDelegate
(
strongSelf
->
_muxer
.
get
());
track
->
delDelegate
(
strongSelf
->
_muxer
.
get
());
}
}
...
@@ -271,7 +271,6 @@ void PlayerProxy::onPlaySuccess() {
...
@@ -271,7 +271,6 @@ void PlayerProxy::onPlaySuccess() {
_muxer
->
addTrackCompleted
();
_muxer
->
addTrackCompleted
();
if
(
_pMediaSrc
)
{
if
(
_pMediaSrc
)
{
_pMediaSrc
->
setTrackSource
(
_muxer
);
//让_muxer对象拦截一部分事件(比如说录像相关事件)
//让_muxer对象拦截一部分事件(比如说录像相关事件)
_pMediaSrc
->
setListener
(
_muxer
);
_pMediaSrc
->
setListener
(
_muxer
);
}
}
...
...
This diff is collapsed.
Click to expand it.
src/Rtmp/RtmpMediaSourceImp.h
查看文件 @
ac705972
...
@@ -112,12 +112,11 @@ public:
...
@@ -112,12 +112,11 @@ public:
* _muxer触发的所有Track就绪的事件
* _muxer触发的所有Track就绪的事件
*/
*/
void
onAllTrackReady
()
override
{
void
onAllTrackReady
()
override
{
setTrackSource
(
_muxer
);
_all_track_ready
=
true
;
_all_track_ready
=
true
;
if
(
_recreate_metadata
)
{
if
(
_recreate_metadata
)
{
//更新metadata
//更新metadata
for
(
auto
&
track
:
_muxer
->
getTracks
())
{
for
(
auto
&
track
:
_muxer
->
getTracks
(
*
this
))
{
Metadata
::
addTrack
(
_metadata
,
track
);
Metadata
::
addTrack
(
_metadata
,
track
);
}
}
RtmpMediaSource
::
updateMetaData
(
_metadata
);
RtmpMediaSource
::
updateMetaData
(
_metadata
);
...
...
This diff is collapsed.
Click to expand it.
src/Rtmp/RtmpMediaSourceMuxer.h
查看文件 @
ac705972
...
@@ -46,11 +46,6 @@ public:
...
@@ -46,11 +46,6 @@ public:
_media_src
->
setMetaData
(
getMetadata
());
_media_src
->
setMetaData
(
getMetadata
());
}
}
// 设置TrackSource
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
){
_media_src
->
setTrackSource
(
track_src
);
}
private
:
private
:
RtmpMediaSource
::
Ptr
_media_src
;
RtmpMediaSource
::
Ptr
_media_src
;
};
};
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspMediaSourceImp.h
查看文件 @
ac705972
...
@@ -100,9 +100,9 @@ public:
...
@@ -100,9 +100,9 @@ public:
* _muxer触发的所有Track就绪的事件
* _muxer触发的所有Track就绪的事件
*/
*/
void
onAllTrackReady
()
override
{
void
onAllTrackReady
()
override
{
setTrackSource
(
_muxer
);
_all_track_ready
=
true
;
_all_track_ready
=
true
;
}
}
private
:
private
:
RtspDemuxer
::
Ptr
_demuxer
;
RtspDemuxer
::
Ptr
_demuxer
;
MultiMediaSourceMuxer
::
Ptr
_muxer
;
MultiMediaSourceMuxer
::
Ptr
_muxer
;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspMediaSourceMuxer.h
查看文件 @
ac705972
...
@@ -45,10 +45,6 @@ public:
...
@@ -45,10 +45,6 @@ public:
_mediaSouce
->
setSdp
(
getSdp
());
_mediaSouce
->
setSdp
(
getSdp
());
}
}
// 设置TrackSource
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
){
_mediaSouce
->
setTrackSource
(
track_src
);
}
private
:
private
:
RtspMediaSource
::
Ptr
_mediaSouce
;
RtspMediaSource
::
Ptr
_mediaSouce
;
};
};
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论