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
Sep 06, 2020
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) {
...
@@ -245,30 +245,6 @@ bool FFmpegSource::close(MediaSource &sender, bool force) {
return
true
;
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
)
{
void
FFmpegSource
::
onGetMediaSource
(
const
MediaSource
::
Ptr
&
src
)
{
auto
listener
=
src
->
getListener
();
auto
listener
=
src
->
getListener
();
if
(
listener
.
lock
().
get
()
!=
this
)
{
if
(
listener
.
lock
().
get
()
!=
this
)
{
...
...
server/FFmpegSource.h
查看文件 @
eca92369
...
@@ -40,7 +40,7 @@ private:
...
@@ -40,7 +40,7 @@ private:
~
FFmpegSnap
()
=
delete
;
~
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
:
public
:
typedef
shared_ptr
<
FFmpegSource
>
Ptr
;
typedef
shared_ptr
<
FFmpegSource
>
Ptr
;
typedef
function
<
void
(
const
SockException
&
ex
)
>
onPlay
;
typedef
function
<
void
(
const
SockException
&
ex
)
>
onPlay
;
...
@@ -60,9 +60,6 @@ private:
...
@@ -60,9 +60,6 @@ private:
//MediaSourceEvent override
//MediaSourceEvent override
bool
close
(
MediaSource
&
sender
,
bool
force
)
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
:
private
:
Process
_process
;
Process
_process
;
...
@@ -72,7 +69,6 @@ private:
...
@@ -72,7 +69,6 @@ private:
string
_src_url
;
string
_src_url
;
string
_dst_url
;
string
_dst_url
;
function
<
void
()
>
_onClose
;
function
<
void
()
>
_onClose
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
Ticker
_replay_ticker
;
Ticker
_replay_ticker
;
};
};
...
...
src/Common/MediaSink.h
查看文件 @
eca92369
...
@@ -37,6 +37,11 @@ public:
...
@@ -37,6 +37,11 @@ public:
virtual
void
addTrack
(
const
Track
::
Ptr
&
track
)
=
0
;
virtual
void
addTrack
(
const
Track
::
Ptr
&
track
)
=
0
;
/**
/**
* 添加所有Track完毕
*/
virtual
void
addTrackCompleted
()
{}
/**
* 重置track
* 重置track
*/
*/
virtual
void
resetTracks
()
=
0
;
virtual
void
resetTracks
()
=
0
;
...
@@ -70,7 +75,7 @@ public:
...
@@ -70,7 +75,7 @@ public:
* 这样会增加生成流的延时,如果添加了音视频双Track,那么可以不调用此方法
* 这样会增加生成流的延时,如果添加了音视频双Track,那么可以不调用此方法
* 否则为了降低流注册延时,请手动调用此方法
* 否则为了降低流注册延时,请手动调用此方法
*/
*/
void
addTrackCompleted
();
void
addTrackCompleted
()
override
;
/**
/**
* 重置track
* 重置track
...
...
src/Common/MediaSource.cpp
查看文件 @
eca92369
差异被折叠。
点击展开。
src/Common/MediaSource.h
查看文件 @
eca92369
...
@@ -44,33 +44,54 @@ public:
...
@@ -44,33 +44,54 @@ public:
virtual
~
MediaSourceEvent
(){};
virtual
~
MediaSourceEvent
(){};
// 通知拖动进度条
// 通知拖动进度条
virtual
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
ui32Stamp
)
{
return
false
;
}
virtual
bool
seekTo
(
MediaSource
&
sender
,
uint32_t
stamp
)
{
return
false
;
}
// 通知其停止
推
流
// 通知其停止
产生
流
virtual
bool
close
(
MediaSource
&
sender
,
bool
force
)
{
return
false
;
}
virtual
bool
close
(
MediaSource
&
sender
,
bool
force
)
{
return
false
;
}
// 观看总人数
//
获取
观看总人数
virtual
int
totalReaderCount
(
MediaSource
&
sender
)
=
0
;
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
onNoneReader
(
MediaSource
&
sender
);
//流注册或注销事件
//流注册或注销事件
virtual
void
onRegist
(
MediaSource
&
sender
,
bool
regist
)
{};
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
:
private
:
Timer
::
Ptr
_async_close_timer
;
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获取媒体相关信息
* 解析url获取媒体相关信息
*/
*/
class
MediaInfo
{
class
MediaInfo
{
public
:
public
:
MediaInfo
()
{}
~
MediaInfo
()
{}
~
MediaInfo
()
{}
MediaInfo
()
{}
MediaInfo
(
const
string
&
url
){
parse
(
url
);
}
MediaInfo
(
const
string
&
url
)
{
parse
(
url
);
}
void
parse
(
const
string
&
url
);
void
parse
(
const
string
&
url
);
public
:
public
:
string
_schema
;
string
_schema
;
string
_host
;
string
_host
;
...
@@ -92,7 +113,7 @@ public:
...
@@ -92,7 +113,7 @@ public:
typedef
unordered_map
<
string
,
AppStreamMap
>
VhostAppStreamMap
;
typedef
unordered_map
<
string
,
AppStreamMap
>
VhostAppStreamMap
;
typedef
unordered_map
<
string
,
VhostAppStreamMap
>
SchemaVhostAppStreamMap
;
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
()
;
virtual
~
MediaSource
()
;
// 获取协议类型
// 获取协议类型
...
@@ -107,7 +128,7 @@ public:
...
@@ -107,7 +128,7 @@ public:
// 设置TrackSource
// 设置TrackSource
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
);
void
setTrackSource
(
const
std
::
weak_ptr
<
TrackSource
>
&
track_src
);
// 获取所有Track
// 获取所有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
);
virtual
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
);
...
@@ -120,12 +141,12 @@ public:
...
@@ -120,12 +141,12 @@ public:
virtual
int
totalReaderCount
();
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
);
bool
close
(
bool
force
);
// 该流无人观看
// 该流无人观看
...
@@ -141,26 +162,26 @@ public:
...
@@ -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
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
);
static
void
for_each_media
(
const
function
<
void
(
const
Ptr
&
src
)
>
&
cb
);
// 从mp4文件生成MediaSource
// 从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
:
protected
:
void
regist
()
;
//媒体注册
bool
un
regist
();
void
regist
();
private
:
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
:
private
:
string
_strSchema
;
string
_schema
;
string
_strVhost
;
string
_vhost
;
string
_strApp
;
string
_app
;
string
_strId
;
string
_stream_id
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
weak_ptr
<
TrackSource
>
_track_source
;
weak_ptr
<
TrackSource
>
_track_source
;
static
SchemaVhostAppStreamMap
g_mapMediaSrc
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
static
recursive_mutex
g_mtxMediaSrc
;
};
};
///缓存刷新策略类
///缓存刷新策略类
...
@@ -221,9 +242,9 @@ private:
...
@@ -221,9 +242,9 @@ private:
}
}
private
:
private
:
bool
_key_pos
=
false
;
policy
_policy
;
policy
_policy
;
std
::
shared_ptr
<
packet_list
>
_cache
;
std
::
shared_ptr
<
packet_list
>
_cache
;
bool
_key_pos
=
false
;
};
};
}
/* namespace mediakit */
}
/* namespace mediakit */
...
...
src/Common/MultiMediaSourceMuxer.cpp
查看文件 @
eca92369
...
@@ -11,15 +11,11 @@
...
@@ -11,15 +11,11 @@
#include "MultiMediaSourceMuxer.h"
#include "MultiMediaSourceMuxer.h"
namespace
mediakit
{
namespace
mediakit
{
///////////////////////////////MultiMuxerPrivate//////////////////////////////////
MultiMuxerPrivate
::~
MultiMuxerPrivate
()
{}
MultiMuxerPrivate
::~
MultiMuxerPrivate
()
{}
MultiMuxerPrivate
::
MultiMuxerPrivate
(
const
string
&
vhost
,
MultiMuxerPrivate
::
MultiMuxerPrivate
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
const
string
&
app
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
const
string
&
stream
,
float
dur_sec
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
if
(
enable_rtmp
)
{
if
(
enable_rtmp
)
{
_rtmp
=
std
::
make_shared
<
RtmpMediaSourceMuxer
>
(
vhost
,
app
,
stream
,
std
::
make_shared
<
TitleMeta
>
(
dur_sec
));
_rtmp
=
std
::
make_shared
<
RtmpMediaSourceMuxer
>
(
vhost
,
app
,
stream
,
std
::
make_shared
<
TitleMeta
>
(
dur_sec
));
_enable_rtxp
=
true
;
_enable_rtxp
=
true
;
...
@@ -73,7 +69,7 @@ void MultiMuxerPrivate::setMediaListener(const std::weak_ptr<MediaSourceEvent> &
...
@@ -73,7 +69,7 @@ void MultiMuxerPrivate::setMediaListener(const std::weak_ptr<MediaSourceEvent> &
if
(
hls_src
)
{
if
(
hls_src
)
{
hls_src
->
setListener
(
listener
);
hls_src
->
setListener
(
listener
);
}
}
_
meida_
listener
=
listener
;
_listener
=
listener
;
}
}
int
MultiMuxerPrivate
::
totalReaderCount
()
const
{
int
MultiMuxerPrivate
::
totalReaderCount
()
const
{
...
@@ -99,7 +95,7 @@ bool MultiMuxerPrivate::setupRecord(MediaSource &sender, Recorder::type type, bo
...
@@ -99,7 +95,7 @@ bool MultiMuxerPrivate::setupRecord(MediaSource &sender, Recorder::type type, bo
auto
hls_src
=
getHlsMediaSource
();
auto
hls_src
=
getHlsMediaSource
();
if
(
hls_src
)
{
if
(
hls_src
)
{
//设置HlsMediaSource的事件监听器
//设置HlsMediaSource的事件监听器
hls_src
->
setListener
(
_
meida_
listener
);
hls_src
->
setListener
(
_listener
);
hls_src
->
setTrackSource
(
shared_from_this
());
hls_src
->
setTrackSource
(
shared_from_this
());
}
}
}
else
if
(
!
start
&&
_hls
)
{
}
else
if
(
!
start
&&
_hls
)
{
...
@@ -146,7 +142,7 @@ void MultiMuxerPrivate::setTimeStamp(uint32_t stamp) {
...
@@ -146,7 +142,7 @@ void MultiMuxerPrivate::setTimeStamp(uint32_t stamp) {
}
}
void
MultiMuxerPrivate
::
setTrackListener
(
Listener
*
listener
)
{
void
MultiMuxerPrivate
::
setTrackListener
(
Listener
*
listener
)
{
_listener
=
listener
;
_
track_
listener
=
listener
;
}
}
void
MultiMuxerPrivate
::
onTrackReady
(
const
Track
::
Ptr
&
track
)
{
void
MultiMuxerPrivate
::
onTrackReady
(
const
Track
::
Ptr
&
track
)
{
...
@@ -206,8 +202,8 @@ void MultiMuxerPrivate::onAllTrackReady() {
...
@@ -206,8 +202,8 @@ void MultiMuxerPrivate::onAllTrackReady() {
hls_src
->
setTrackSource
(
shared_from_this
());
hls_src
->
setTrackSource
(
shared_from_this
());
}
}
if
(
_listener
)
{
if
(
_
track_
listener
)
{
_listener
->
onAllTrackReady
();
_
track_
listener
->
onAllTrackReady
();
}
}
}
}
...
@@ -219,22 +215,18 @@ MediaSource::Ptr MultiMuxerPrivate::getHlsMediaSource() const {
...
@@ -219,22 +215,18 @@ MediaSource::Ptr MultiMuxerPrivate::getHlsMediaSource() const {
return
nullptr
;
return
nullptr
;
}
}
/////////////////////////////////////////////////////////////////
///////////////////////////////
MultiMediaSourceMuxer
//////////////////////////////////
MultiMediaSourceMuxer
::~
MultiMediaSourceMuxer
()
{}
MultiMediaSourceMuxer
::~
MultiMediaSourceMuxer
()
{}
MultiMediaSourceMuxer
::
MultiMediaSourceMuxer
(
const
string
&
vhost
,
const
string
&
app
,
MultiMediaSourceMuxer
::
MultiMediaSourceMuxer
(
const
string
&
vhost
,
const
string
&
app
,
const
string
&
stream
,
float
dur_sec
,
const
string
&
stream
,
bool
enable_rtsp
,
bool
enable_rtmp
,
bool
enable_hls
,
bool
enable_mp4
)
{
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
.
reset
(
new
MultiMuxerPrivate
(
vhost
,
app
,
stream
,
dur_sec
,
enable_rtsp
,
enable_rtmp
,
enable_hls
,
enable_mp4
));
_muxer
->
setTrackListener
(
this
);
_muxer
->
setTrackListener
(
this
);
}
}
void
MultiMediaSourceMuxer
::
setMediaListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
void
MultiMediaSourceMuxer
::
setMediaListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
)
{
//拦截事件
_muxer
->
setMediaListener
(
shared_from_this
());
_muxer
->
setMediaListener
(
shared_from_this
());
_listener
=
listener
;
_listener
=
listener
;
}
}
...
@@ -255,46 +247,14 @@ vector<Track::Ptr> MultiMediaSourceMuxer::getTracks(bool trackReady) const {
...
@@ -255,46 +247,14 @@ vector<Track::Ptr> MultiMediaSourceMuxer::getTracks(bool trackReady) const {
return
_muxer
->
getTracks
(
trackReady
);
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
)
{
int
MultiMediaSourceMuxer
::
totalReaderCount
(
MediaSource
&
sender
)
{
auto
listener
=
_listener
.
lock
();
auto
listener
=
_listener
.
lock
();
if
(
!
listener
)
{
if
(
!
listener
)
{
return
_muxer
->
totalReaderCount
();
return
totalReaderCount
();
}
}
return
listener
->
totalReaderCount
(
sender
);
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
)
{
bool
MultiMediaSourceMuxer
::
setupRecord
(
MediaSource
&
sender
,
Recorder
::
type
type
,
bool
start
,
const
string
&
custom_path
)
{
return
_muxer
->
setupRecord
(
sender
,
type
,
start
,
custom_path
);
return
_muxer
->
setupRecord
(
sender
,
type
,
start
,
custom_path
);
}
}
...
@@ -313,9 +273,9 @@ void MultiMediaSourceMuxer::addTrackCompleted() {
...
@@ -313,9 +273,9 @@ void MultiMediaSourceMuxer::addTrackCompleted() {
void
MultiMediaSourceMuxer
::
onAllTrackReady
(){
void
MultiMediaSourceMuxer
::
onAllTrackReady
(){
_muxer
->
setMediaListener
(
shared_from_this
());
_muxer
->
setMediaListener
(
shared_from_this
());
auto
track_
listener
=
_track_listener
.
lock
();
auto
listener
=
_track_listener
.
lock
();
if
(
track_
listener
){
if
(
listener
){
track_
listener
->
onAllTrackReady
();
listener
->
onAllTrackReady
();
}
}
}
}
...
@@ -370,19 +330,19 @@ public:
...
@@ -370,19 +330,19 @@ public:
return
_frame
->
getCodecId
();
return
_frame
->
getCodecId
();
}
}
private
:
private
:
Frame
::
Ptr
_frame
;
int64_t
_dts
;
int64_t
_dts
;
int64_t
_pts
;
int64_t
_pts
;
Frame
::
Ptr
_frame
;
};
};
void
MultiMediaSourceMuxer
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
void
MultiMediaSourceMuxer
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
GET_CONFIG
(
bool
,
modify_stamp
,
General
::
kModifyStamp
);
GET_CONFIG
(
bool
,
modify_stamp
,
General
::
kModifyStamp
);
if
(
!
modify_stamp
)
{
if
(
!
modify_stamp
)
{
//未开启时间戳覆盖
//未开启时间戳覆盖
_muxer
->
inputFrame
(
frame
);
_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
);
_muxer
->
inputFrame
(
new_frame
);
}
}
...
...
src/Common/MultiMediaSourceMuxer.h
查看文件 @
eca92369
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
#include "Record/HlsRecorder.h"
#include "Record/HlsRecorder.h"
namespace
mediakit
{
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
:
public
:
friend
class
MultiMediaSourceMuxer
;
friend
class
MultiMediaSourceMuxer
;
typedef
std
::
shared_ptr
<
MultiMuxerPrivate
>
Ptr
;
typedef
std
::
shared_ptr
<
MultiMuxerPrivate
>
Ptr
;
...
@@ -47,17 +47,17 @@ private:
...
@@ -47,17 +47,17 @@ private:
MediaSource
::
Ptr
getHlsMediaSource
()
const
;
MediaSource
::
Ptr
getHlsMediaSource
()
const
;
private
:
private
:
bool
_enable_rtxp
=
false
;
bool
_enable_record
=
false
;
Listener
*
_track_listener
=
nullptr
;
RtmpMediaSourceMuxer
::
Ptr
_rtmp
;
RtmpMediaSourceMuxer
::
Ptr
_rtmp
;
RtspMediaSourceMuxer
::
Ptr
_rtsp
;
RtspMediaSourceMuxer
::
Ptr
_rtsp
;
MediaSinkInterface
::
Ptr
_hls
;
MediaSinkInterface
::
Ptr
_hls
;
MediaSinkInterface
::
Ptr
_mp4
;
MediaSinkInterface
::
Ptr
_mp4
;
Listener
*
_listener
=
nullptr
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MediaSourceEvent
>
_meida_listener
;
bool
_enable_rtxp
=
false
;
bool
_enable_record
=
false
;
};
};
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
:
public
:
typedef
MultiMuxerPrivate
::
Listener
Listener
;
typedef
MultiMuxerPrivate
::
Listener
Listener
;
typedef
std
::
shared_ptr
<
MultiMediaSourceMuxer
>
Ptr
;
typedef
std
::
shared_ptr
<
MultiMediaSourceMuxer
>
Ptr
;
...
@@ -84,11 +84,18 @@ public:
...
@@ -84,11 +84,18 @@ public:
int
totalReaderCount
()
const
;
int
totalReaderCount
()
const
;
/**
/**
* 判断是否生效(是否正在转其他协议)
*/
bool
isEnabled
();
/**
* 设置MediaSource时间戳
* 设置MediaSource时间戳
* @param stamp 时间戳
* @param stamp 时间戳
*/
*/
void
setTimeStamp
(
uint32_t
stamp
);
void
setTimeStamp
(
uint32_t
stamp
);
/////////////////////////////////TrackSource override/////////////////////////////////
/**
/**
* 获取所有Track
* 获取所有Track
* @param trackReady 是否筛选过滤未就绪的track
* @param trackReady 是否筛选过滤未就绪的track
...
@@ -96,21 +103,7 @@ public:
...
@@ -96,21 +103,7 @@ public:
*/
*/
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackReady
=
true
)
const
override
;
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackReady
=
true
)
const
override
;
/**
/////////////////////////////////MediaSourceEvent 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
;
/**
/**
* 观看总人数
* 观看总人数
...
@@ -120,19 +113,6 @@ public:
...
@@ -120,19 +113,6 @@ public:
int
totalReaderCount
(
MediaSource
&
sender
)
override
;
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 type 录制类型
* @param start 开始或停止
* @param start 开始或停止
...
@@ -148,6 +128,8 @@ public:
...
@@ -148,6 +128,8 @@ public:
*/
*/
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
bool
isRecording
(
MediaSource
&
sender
,
Recorder
::
type
type
)
override
;
/////////////////////////////////MediaSinkInterface override/////////////////////////////////
/**
/**
* 添加track,内部会调用Track的clone方法
* 添加track,内部会调用Track的clone方法
* 只会克隆sps pps这些信息 ,而不会克隆Delegate相关关系
* 只会克隆sps pps这些信息 ,而不会克隆Delegate相关关系
...
@@ -158,12 +140,7 @@ public:
...
@@ -158,12 +140,7 @@ public:
/**
/**
* 添加track完毕
* 添加track完毕
*/
*/
void
addTrackCompleted
();
void
addTrackCompleted
()
override
;
/**
* 所有track全部就绪
*/
void
onAllTrackReady
()
override
;
/**
/**
* 重置track
* 重置track
...
@@ -176,16 +153,17 @@ public:
...
@@ -176,16 +153,17 @@ public:
*/
*/
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
;
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
;
/////////////////////////////////MultiMuxerPrivate::Listener override/////////////////////////////////
/**
/**
*
判断是否生效(是否正在转其他协议)
*
所有track全部就绪
*/
*/
bool
isEnabled
()
;
void
onAllTrackReady
()
override
;
private
:
private
:
Stamp
_stamp
[
2
];
MultiMuxerPrivate
::
Ptr
_muxer
;
MultiMuxerPrivate
::
Ptr
_muxer
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
std
::
weak_ptr
<
MultiMuxerPrivate
::
Listener
>
_track_listener
;
std
::
weak_ptr
<
MultiMuxerPrivate
::
Listener
>
_track_listener
;
Stamp
_stamp
[
2
];
};
};
}
//namespace mediakit
}
//namespace mediakit
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论