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
06d61cf1
Commit
06d61cf1
authored
4 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加全局时间戳覆盖逻辑
parent
41309105
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
73 行增加
和
2 行删除
+73
-2
conf/config.ini
+5
-1
src/Common/MultiMediaSourceMuxer.cpp
+62
-1
src/Common/MultiMediaSourceMuxer.h
+1
-0
src/Common/config.cpp
+2
-0
src/Common/config.h
+3
-0
没有找到文件。
conf/config.ini
查看文件 @
06d61cf1
...
...
@@ -18,7 +18,6 @@ snap=%s -i %s -y -f mjpeg -t 0.001 %s
#可以为相对(相对于本可执行程序目录)或绝对路径
log
=
./ffmpeg/ffmpeg.log
[general]
#是否启用虚拟主机
enableVhost
=
0
...
...
@@ -48,6 +47,11 @@ publishToMP4=0
#合并写缓存大小(单位毫秒),合并写指服务器缓存一定的数据后才会一次性写入socket,这样能提高性能,但是会提高延时
#开启后会同时关闭TCP_NODELAY并开启MSG_MORE
mergeWriteMS
=
0
#全局的时间戳覆盖开关,在转协议时,对frame进行时间戳覆盖
#该开关对rtsp/rtmp/rtp推流、rtsp/rtmp/hls拉流代理转协议时生效
#会直接影响rtsp/rtmp/hls/mp4/flv等协议的时间戳
#同协议情况下不影响(例如rtsp/rtmp推流,那么播放rtsp/rtmp时不会影响时间戳)
modifyStamp
=
0
[hls]
#hls写文件的buf大小,调整参数可以提高文件io性能
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.cpp
查看文件 @
06d61cf1
...
...
@@ -298,8 +298,69 @@ void MultiMediaSourceMuxer::resetTracks() {
_muxer
->
resetTracks
();
}
//该类实现frame级别的时间戳覆盖
class
FrameModifyStamp
:
public
Frame
{
public
:
typedef
std
::
shared_ptr
<
FrameModifyStamp
>
Ptr
;
FrameModifyStamp
(
const
Frame
::
Ptr
&
frame
,
Stamp
&
stamp
){
_frame
=
frame
;
//覆盖时间戳
stamp
.
revise
(
frame
->
dts
(),
frame
->
pts
(),
_dts
,
_pts
,
true
);
}
~
FrameModifyStamp
()
override
{}
uint32_t
dts
()
const
override
{
return
_dts
;
}
uint32_t
pts
()
const
override
{
return
_pts
;
}
uint32_t
prefixSize
()
const
override
{
return
_frame
->
prefixSize
();
}
bool
keyFrame
()
const
override
{
return
_frame
->
keyFrame
();
}
bool
configFrame
()
const
override
{
return
_frame
->
configFrame
();
}
bool
cacheAble
()
const
override
{
return
_frame
->
cacheAble
();
}
char
*
data
()
const
override
{
return
_frame
->
data
();
}
uint32_t
size
()
const
override
{
return
_frame
->
size
();
}
CodecId
getCodecId
()
const
override
{
return
_frame
->
getCodecId
();
}
private
:
Frame
::
Ptr
_frame
;
int64_t
_dts
;
int64_t
_pts
;
};
void
MultiMediaSourceMuxer
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
_muxer
->
inputFrame
(
frame
);
GET_CONFIG
(
bool
,
modify_stamp
,
General
::
kModifyStamp
);
if
(
!
modify_stamp
){
//未开启时间戳覆盖
_muxer
->
inputFrame
(
frame
);
}
else
{
//开启了时间戳覆盖
FrameModifyStamp
::
Ptr
new_frame
=
std
::
make_shared
<
FrameModifyStamp
>
(
frame
,
_stamp
[
frame
->
getTrackType
()]);
//输入时间戳覆盖后的帧
_muxer
->
inputFrame
(
new_frame
);
}
}
bool
MultiMediaSourceMuxer
::
isEnabled
(){
...
...
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.h
查看文件 @
06d61cf1
...
...
@@ -178,6 +178,7 @@ public:
private
:
MultiMuxerPrivate
::
Ptr
_muxer
;
std
::
weak_ptr
<
MediaSourceEvent
>
_listener
;
Stamp
_stamp
[
2
];
};
}
//namespace mediakit
...
...
This diff is collapsed.
Click to expand it.
src/Common/config.cpp
查看文件 @
06d61cf1
...
...
@@ -67,6 +67,7 @@ const string kPublishToRtxp = GENERAL_FIELD"publishToRtxp";
const
string
kPublishToHls
=
GENERAL_FIELD
"publishToHls"
;
const
string
kPublishToMP4
=
GENERAL_FIELD
"publishToMP4"
;
const
string
kMergeWriteMS
=
GENERAL_FIELD
"mergeWriteMS"
;
const
string
kModifyStamp
=
GENERAL_FIELD
"modifyStamp"
;
onceToken
token
([](){
mINI
::
Instance
()[
kFlowThreshold
]
=
1024
;
...
...
@@ -79,6 +80,7 @@ onceToken token([](){
mINI
::
Instance
()[
kPublishToHls
]
=
1
;
mINI
::
Instance
()[
kPublishToMP4
]
=
0
;
mINI
::
Instance
()[
kMergeWriteMS
]
=
0
;
mINI
::
Instance
()[
kModifyStamp
]
=
0
;
},
nullptr
);
}
//namespace General
...
...
This diff is collapsed.
Click to expand it.
src/Common/config.h
查看文件 @
06d61cf1
...
...
@@ -174,6 +174,8 @@ extern const string kPublishToMP4 ;
//合并写缓存大小(单位毫秒),合并写指服务器缓存一定的数据后才会一次性写入socket,这样能提高性能,但是会提高延时
//开启后会同时关闭TCP_NODELAY并开启MSG_MORE
extern
const
string
kMergeWriteMS
;
//全局的时间戳覆盖开关,在转协议时,对frame进行时间戳覆盖
extern
const
string
kModifyStamp
;
}
//namespace General
...
...
@@ -217,6 +219,7 @@ extern const string kDirectProxy;
////////////RTMP服务器配置///////////
namespace
Rtmp
{
//rtmp推流时间戳覆盖开关
extern
const
string
kModifyStamp
;
//握手超时时间,默认15秒
extern
const
string
kHandshakeSecond
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论