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
eca92369
Commit
eca92369
authored
4 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化与拦截代码
parent
74d6689a
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
103 行增加
和
167 行删除
+103
-167
server/FFmpegSource.cpp
+0
-24
server/FFmpegSource.h
+1
-5
src/Common/MediaSink.h
+6
-1
src/Common/MediaSource.cpp
+0
-0
src/Common/MediaSource.h
+51
-30
src/Common/MultiMediaSourceMuxer.cpp
+23
-63
src/Common/MultiMediaSourceMuxer.h
+22
-44
没有找到文件。
server/FFmpegSource.cpp
查看文件 @
eca92369
...
...
@@ -245,30 +245,6 @@ bool FFmpegSource::close(MediaSource &sender, bool force) {
return
true
;
}
int
FFmpegSource
::
totalReaderCount
(
MediaSource
&
sender
)
{
auto
listener
=
_listener
.
lock
();
if
(
listener
){
return
listener
->
totalReaderCount
(
sender
);
}
return
sender
.
readerCount
();
}
void
FFmpegSource
::
onNoneReader
(
MediaSource
&
sender
){
auto
listener
=
_listener
.
lock
();
if
(
listener
){
listener
->
onNoneReader
(
sender
);
return
;
}
MediaSourceEvent
::
onNoneReader
(
sender
);
}
void
FFmpegSource
::
onRegist
(
MediaSource
&
sender
,
bool
regist
){
auto
listener
=
_listener
.
lock
();
if
(
listener
){
listener
->
onRegist
(
sender
,
regist
);
}
}
void
FFmpegSource
::
onGetMediaSource
(
const
MediaSource
::
Ptr
&
src
)
{
auto
listener
=
src
->
getListener
();
if
(
listener
.
lock
().
get
()
!=
this
)
{
...
...
This diff is collapsed.
Click to expand it.
server/FFmpegSource.h
查看文件 @
eca92369
...
...
@@ -40,7 +40,7 @@ private:
~
FFmpegSnap
()
=
delete
;
};
class
FFmpegSource
:
public
std
::
enable_shared_from_this
<
FFmpegSource
>
,
public
MediaSourceEvent
{
class
FFmpegSource
:
public
std
::
enable_shared_from_this
<
FFmpegSource
>
,
public
MediaSourceEvent
Interceptor
{
public
:
typedef
shared_ptr
<
FFmpegSource
>
Ptr
;
typedef
function
<
void
(
const
SockException
&
ex
)
>
onPlay
;
...
...
@@ -60,9 +60,6 @@ private:
//MediaSourceEvent override
bool
close
(
MediaSource
&
sender
,
bool
force
)
override
;
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
override
;
private
:
Process
_process
;
...
...
@@ -72,7 +69,6 @@ private:
string
_src_url
;
string
_dst_url
;
function
<
void
()
>
_onClose
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
Ticker
_replay_ticker
;
};
...
...
This diff is collapsed.
Click to expand it.
src/Common/MediaSink.h
查看文件 @
eca92369
...
...
@@ -37,6 +37,11 @@ public:
virtual
void
addTrack
(
const
Track
::
Ptr
&
track
)
=
0
;
/**
* 添加所有Track完毕
*/
virtual
void
addTrackCompleted
()
{}
/**
* 重置track
*/
virtual
void
resetTracks
()
=
0
;
...
...
@@ -70,7 +75,7 @@ public:
* 这样会增加生成流的延时,如果添加了音视频双Track,那么可以不调用此方法
* 否则为了降低流注册延时,请手动调用此方法
*/
void
addTrackCompleted
();
void
addTrackCompleted
()
override
;
/**
* 重置track
...
...
This diff is collapsed.
Click to expand it.
src/Common/MediaSource.cpp
查看文件 @
eca92369
差异被折叠。
点击展开。
src/Common/MediaSource.h
查看文件 @
eca92369
...
...
@@ -44,33 +44,54 @@ public:
virtual
~
MediaSourceEvent
(){};
// 通知拖动进度条
virtual
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
ui32Stamp
)
{
return
false
;
}
// 通知其停止
推
流
virtual
bool
close
(
MediaSource
&
sender
,
bool
force
)
{
return
false
;
}
// 观看总人数
virtual
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
stamp
)
{
return
false
;
}
// 通知其停止
产生
流
virtual
bool
close
(
MediaSource
&
sender
,
bool
force
)
{
return
false
;
}
//
获取
观看总人数
virtual
int
totalReaderCount
(
MediaSource
&
sender
)
=
0
;
// 开启或关闭录制
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
void
onNoneReader
(
MediaSource
&
sender
);
//流注册或注销事件
virtual
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
{};
////////////////////////仅供MultiMediaSourceMuxer对象继承////////////////////////
// 开启或关闭录制
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
;
};
private
:
Timer
::
Ptr
_async_close_timer
;
};
//该对象用于拦截感兴趣的MediaSourceEvent事件
class
MediaSourceEventInterceptor
:
public
MediaSourceEvent
{
public
:
MediaSourceEventInterceptor
(){}
~
MediaSourceEventInterceptor
()
override
{}
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
stamp
)
override
;
bool
close
(
MediaSource
&
sender
,
bool
force
)
override
;
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
override
;;
bool
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
override
;
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
protected
:
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
/**
* 解析url获取媒体相关信息
*/
class
MediaInfo
{
public
:
MediaInfo
()
{}
~
MediaInfo
()
{}
MediaInfo
(
const
string
&
url
){
parse
(
url
);
}
~
MediaInfo
()
{}
MediaInfo
()
{}
MediaInfo
(
const
string
&
url
)
{
parse
(
url
);
}
void
parse
(
const
string
&
url
);
public
:
string
_schema
;
string
_host
;
...
...
@@ -92,7 +113,7 @@ public:
typedef
unordered_map
<
string
,
AppStreamMap
>
VhostAppStreamMap
;
typedef
unordered_map
<
string
,
VhostAppStreamMap
>
SchemaVhostAppStreamMap
;
MediaSource
(
const
string
&
s
trSchema
,
const
string
&
strVhost
,
const
string
&
strApp
,
const
string
&
strI
d
)
;
MediaSource
(
const
string
&
s
chema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream_i
d
)
;
virtual
~
MediaSource
()
;
// 获取协议类型
...
...
@@ -107,7 +128,7 @@ public:
// 设置TrackSource
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
);
// 获取所有Track
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackR
eady
=
true
)
const
override
;
vector
<
Track
::
Ptr
>
getTracks
(
bool
r
eady
=
true
)
const
override
;
// 设置监听者
virtual
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
...
...
@@ -120,12 +141,12 @@ public:
virtual
int
totalReaderCount
();
// 获取流当前时间戳
virtual
uint32_t
getTimeStamp
(
TrackType
t
rackT
ype
)
{
return
0
;
};
virtual
uint32_t
getTimeStamp
(
TrackType
type
)
{
return
0
;
};
// 设置时间戳
virtual
void
setTimeStamp
(
uint32_t
uiS
tamp
)
{};
virtual
void
setTimeStamp
(
uint32_t
s
tamp
)
{};
// 拖动进度条
bool
seekTo
(
uint32_t
ui32S
tamp
);
bool
seekTo
(
uint32_t
s
tamp
);
// 关闭该流
bool
close
(
bool
force
);
// 该流无人观看
...
...
@@ -141,26 +162,26 @@ public:
static
void
findAsync
(
const
MediaInfo
&
info
,
const
std
::
shared_ptr
<
TcpSession
>
&
session
,
const
function
<
void
(
const
Ptr
&
src
)
>
&
cb
);
// 遍历所有流
static
void
for_each_media
(
const
function
<
void
(
const
Ptr
&
src
)
>
&
cb
);
// 从mp4文件生成MediaSource
static
MediaSource
::
Ptr
createFromMP4
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
const
string
&
file
Path
=
""
,
bool
checkA
pp
=
true
);
static
MediaSource
::
Ptr
createFromMP4
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
const
string
&
file
_path
=
""
,
bool
check_a
pp
=
true
);
protected
:
void
regist
()
;
bool
un
regist
();
//媒体注册
void
regist
();
private
:
static
Ptr
find_l
(
const
string
&
schema
,
const
string
&
vhost
,
const
string
&
app
,
const
string
&
id
,
bool
bMake
);
static
void
findAsync_l
(
const
MediaInfo
&
info
,
const
std
::
shared_ptr
<
TcpSession
>
&
session
,
bool
retry
,
const
function
<
void
(
const
MediaSource
::
Ptr
&
src
)
>
&
cb
);
//媒体注销
bool
unregist
();
//触发媒体事件
void
emitEvent
(
bool
regist
);
private
:
string
_strSchema
;
string
_strVhost
;
string
_strApp
;
string
_strId
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
string
_schema
;
string
_vhost
;
string
_app
;
string
_stream_id
;
weak_ptr
<
TrackSource
>
_track_source
;
static
SchemaVhostAppStreamMap
g_mapMediaSrc
;
static
recursive_mutex
g_mtxMediaSrc
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
///缓存刷新策略类
...
...
@@ -221,9 +242,9 @@ private:
}
private
:
bool
_key_pos
=
false
;
policy
_policy
;
std
::
shared_ptr
<
packet_list
>
_cache
;
bool
_key_pos
=
false
;
};
}
/* namespace mediakit */
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.cpp
查看文件 @
eca92369
...
...
@@ -11,15 +11,11 @@
#include "MultiMediaSourceMuxer.h"
namespace
mediakit
{
///////////////////////////////MultiMuxerPrivate//////////////////////////////////
MultiMuxerPrivate
::~
MultiMuxerPrivate
()
{}
MultiMuxerPrivate
::
MultiMuxerPrivate
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
MultiMuxerPrivate
::
MultiMuxerPrivate
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
if
(
enable_rtmp
)
{
_rtmp
=
std
::
make_shared
<
RtmpMediaSourceMuxer
>
(
vhost
,
app
,
stream
,
std
::
make_shared
<
TitleMeta
>
(
dur_sec
));
_enable_rtxp
=
true
;
...
...
@@ -73,7 +69,7 @@ void MultiMuxerPrivate::setMediaListener(const std::weak_ptr<MediaSourceEvent> &
if
(
hls_src
)
{
hls_src
->
setListener
(
listener
);
}
_
meida_
listener
=
listener
;
_listener
=
listener
;
}
int
MultiMuxerPrivate
::
totalReaderCount
()
const
{
...
...
@@ -99,7 +95,7 @@ bool MultiMuxerPrivate::setupRecord(MediaSource &sender, Recorder::type type, bo
auto
hls_src
=
getHlsMediaSource
();
if
(
hls_src
)
{
//设置HlsMediaSource的事件监听器
hls_src
->
setListener
(
_
meida_
listener
);
hls_src
->
setListener
(
_listener
);
hls_src
->
setTrackSource
(
shared_from_this
());
}
}
else
if
(
!
start
&&
_hls
)
{
...
...
@@ -146,7 +142,7 @@ void MultiMuxerPrivate::setTimeStamp(uint32_t stamp) {
}
void
MultiMuxerPrivate
::
setTrackListener
(
Listener
*
listener
)
{
_listener
=
listener
;
_
track_
listener
=
listener
;
}
void
MultiMuxerPrivate
::
onTrackReady
(
const
Track
::
Ptr
&
track
)
{
...
...
@@ -206,8 +202,8 @@ void MultiMuxerPrivate::onAllTrackReady() {
hls_src
->
setTrackSource
(
shared_from_this
());
}
if
(
_listener
)
{
_listener
->
onAllTrackReady
();
if
(
_
track_
listener
)
{
_
track_
listener
->
onAllTrackReady
();
}
}
...
...
@@ -219,22 +215,18 @@ MediaSource::Ptr MultiMuxerPrivate::getHlsMediaSource() const {
return
nullptr
;
}
/////////////////////////////////////////////////////////////////
///////////////////////////////
MultiMediaSourceMuxer
//////////////////////////////////
MultiMediaSourceMuxer
::~
MultiMediaSourceMuxer
()
{}
MultiMediaSourceMuxer
::
MultiMediaSourceMuxer
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
MultiMediaSourceMuxer
::
MultiMediaSourceMuxer
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
_muxer
.
reset
(
new
MultiMuxerPrivate
(
vhost
,
app
,
stream
,
dur_sec
,
enable_rtsp
,
enable_rtmp
,
enable_hls
,
enable_mp4
));
_muxer
->
setTrackListener
(
this
);
}
void
MultiMediaSourceMuxer
::
setMediaListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
//拦截事件
_muxer
->
setMediaListener
(
shared_from_this
());
_listener
=
listener
;
}
...
...
@@ -255,46 +247,14 @@ vector<Track::Ptr> MultiMediaSourceMuxer::getTracks(bool trackReady) const {
return
_muxer
->
getTracks
(
trackReady
);
}
bool
MultiMediaSourceMuxer
::
seekTo
(
MediaSource
&
sender
,
uint32_t
ui32Stamp
)
{
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
return
false
;
}
return
listener
->
seekTo
(
sender
,
ui32Stamp
);
}
bool
MultiMediaSourceMuxer
::
close
(
MediaSource
&
sender
,
bool
force
)
{
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
return
false
;
}
return
listener
->
close
(
sender
,
force
);
}
int
MultiMediaSourceMuxer
::
totalReaderCount
(
MediaSource
&
sender
)
{
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
return
_muxer
->
totalReaderCount
();
return
totalReaderCount
();
}
return
listener
->
totalReaderCount
(
sender
);
}
void
MultiMediaSourceMuxer
::
onNoneReader
(
MediaSource
&
sender
){
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
MediaSourceEvent
::
onNoneReader
(
sender
);
return
;
}
listener
->
onNoneReader
(
sender
);
}
void
MultiMediaSourceMuxer
::
onRegist
(
MediaSource
&
sender
,
bool
regist
){
auto
listener
=
_listener
.
lock
();
if
(
listener
)
{
listener
->
onRegist
(
sender
,
regist
);
}
}
bool
MultiMediaSourceMuxer
::
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
{
return
_muxer
->
setupRecord
(
sender
,
type
,
start
,
custom_path
);
}
...
...
@@ -313,9 +273,9 @@ void MultiMediaSourceMuxer::addTrackCompleted() {
void
MultiMediaSourceMuxer
::
onAllTrackReady
(){
_muxer
->
setMediaListener
(
shared_from_this
());
auto
track_
listener
=
_track_listener
.
lock
();
if
(
track_
listener
){
track_
listener
->
onAllTrackReady
();
auto
listener
=
_track_listener
.
lock
();
if
(
listener
){
listener
->
onAllTrackReady
();
}
}
...
...
@@ -370,19 +330,19 @@ public:
return
_frame
->
getCodecId
();
}
private
:
Frame
::
Ptr
_frame
;
int64_t
_dts
;
int64_t
_pts
;
Frame
::
Ptr
_frame
;
};
void
MultiMediaSourceMuxer
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
GET_CONFIG
(
bool
,
modify_stamp
,
General
::
kModifyStamp
);
if
(
!
modify_stamp
)
{
GET_CONFIG
(
bool
,
modify_stamp
,
General
::
kModifyStamp
);
if
(
!
modify_stamp
)
{
//未开启时间戳覆盖
_muxer
->
inputFrame
(
frame
);
}
else
{
}
else
{
//开启了时间戳覆盖
FrameModifyStamp
::
Ptr
new_frame
=
std
::
make_shared
<
FrameModifyStamp
>
(
frame
,
_stamp
[
frame
->
getTrackType
()]);
FrameModifyStamp
::
Ptr
new_frame
=
std
::
make_shared
<
FrameModifyStamp
>
(
frame
,
_stamp
[
frame
->
getTrackType
()]);
//输入时间戳覆盖后的帧
_muxer
->
inputFrame
(
new_frame
);
}
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.h
查看文件 @
eca92369
...
...
@@ -17,7 +17,7 @@
#include "Record/HlsRecorder.h"
namespace
mediakit
{
class
MultiMuxerPrivate
:
public
MediaSink
,
public
std
::
enable_shared_from_this
<
MultiMuxerPrivate
>
{
class
MultiMuxerPrivate
:
public
MediaSink
,
public
std
::
enable_shared_from_this
<
MultiMuxerPrivate
>
{
public
:
friend
class
MultiMediaSourceMuxer
;
typedef
std
::
shared_ptr
<
MultiMuxerPrivate
>
Ptr
;
...
...
@@ -47,17 +47,17 @@ private:
MediaSource
::
Ptr
getHlsMediaSource
()
const
;
private
:
bool
_enable_rtxp
=
false
;
bool
_enable_record
=
false
;
Listener
*
_track_listener
=
nullptr
;
RtmpMediaSourceMuxer
::
Ptr
_rtmp
;
RtspMediaSourceMuxer
::
Ptr
_rtsp
;
MediaSinkInterface
::
Ptr
_hls
;
MediaSinkInterface
::
Ptr
_mp4
;
Listener
*
_listener
=
nullptr
;
std
::
weak_ptr
<
MediaSourceEvent
>
_meida_listener
;
bool
_enable_rtxp
=
false
;
bool
_enable_record
=
false
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
};
class
MultiMediaSourceMuxer
:
public
MediaSourceEvent
,
public
MediaSinkInterface
,
public
TrackSource
,
public
MultiMuxerPrivate
::
Listener
,
public
std
::
enable_shared_from_this
<
MultiMediaSourceMuxer
>
{
class
MultiMediaSourceMuxer
:
public
MediaSourceEvent
Interceptor
,
public
MediaSinkInterface
,
public
TrackSource
,
public
MultiMuxerPrivate
::
Listener
,
public
std
::
enable_shared_from_this
<
MultiMediaSourceMuxer
>
{
public
:
typedef
MultiMuxerPrivate
::
Listener
Listener
;
typedef
std
::
shared_ptr
<
MultiMediaSourceMuxer
>
Ptr
;
...
...
@@ -84,11 +84,18 @@ public:
int
totalReaderCount
()
const
;
/**
* 判断是否生效(是否正在转其他协议)
*/
bool
isEnabled
();
/**
* 设置MediaSource时间戳
* @param stamp 时间戳
*/
void
setTimeStamp
(
uint32_t
stamp
);
/////////////////////////////////TrackSource override/////////////////////////////////
/**
* 获取所有Track
* @param trackReady 是否筛选过滤未就绪的track
...
...
@@ -96,21 +103,7 @@ public:
*/
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackReady
=
true
)
const
override
;
/**
* 通知拖动进度条
* @param sender 事件发送者
* @param ui32Stamp 目标时间戳
* @return 是否成功
*/
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
ui32Stamp
)
override
;
/**
* 通知停止流生成
* @param sender 事件发送者
* @param force 是否强制关闭
* @return 成功与否
*/
bool
close
(
MediaSource
&
sender
,
bool
force
)
override
;
/////////////////////////////////MediaSourceEvent override/////////////////////////////////
/**
* 观看总人数
...
...
@@ -120,19 +113,6 @@ public:
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
/**
* 触发无人观看事件
* @param sender 触发者
*/
void
onNoneReader
(
MediaSource
&
sender
)
override
;
/**
* 媒体注册注销事件
* @param sender 触发者
* @param regist 是否为注册事件
*/
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
override
;
/**
* 设置录制状态
* @param type 录制类型
* @param start 开始或停止
...
...
@@ -148,6 +128,8 @@ public:
*/
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
/////////////////////////////////MediaSinkInterface override/////////////////////////////////
/**
* 添加track,内部会调用Track的clone方法
* 只会克隆sps pps这些信息 ,而不会克隆Delegate相关关系
...
...
@@ -158,12 +140,7 @@ public:
/**
* 添加track完毕
*/
void
addTrackCompleted
();
/**
* 所有track全部就绪
*/
void
onAllTrackReady
()
override
;
void
addTrackCompleted
()
override
;
/**
* 重置track
...
...
@@ -176,16 +153,17 @@ public:
*/
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
;
/////////////////////////////////MultiMuxerPrivate::Listener override/////////////////////////////////
/**
*
判断是否生效(是否正在转其他协议)
*
所有track全部就绪
*/
bool
isEnabled
()
;
void
onAllTrackReady
()
override
;
private
:
Stamp
_stamp
[
2
];
MultiMuxerPrivate
::
Ptr
_muxer
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MultiMuxerPrivate
::
Listener
>
_track_listener
;
Stamp
_stamp
[
2
];
};
}
//namespace mediakit
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论