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
730db98a
Commit
730db98a
authored
7 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化hls卡顿现象
parent
f2e82fc2
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
18 行增加
和
13 行删除
+18
-13
src/MediaFile/HLSMaker.cpp
+13
-8
src/MediaFile/HLSMaker.h
+3
-3
src/MediaFile/MediaRecorder.cpp
+2
-2
没有找到文件。
src/MediaFile/HLSMaker.cpp
查看文件 @
730db98a
...
...
@@ -128,9 +128,15 @@ bool HLSMaker::write_index_file(int iFirstSegment, unsigned int uiLastSegment, i
}
void
HLSMaker
::
inputH264
(
void
*
data
,
uint32_t
length
,
uint32_t
timeStamp
,
int
type
)
{
if
(
m_ui32LastStamp
==
0
){
m_ui32LastStamp
=
timeStamp
;
}
int
stampInc
=
timeStamp
-
m_ui32LastStamp
;
switch
(
type
)
{
case
7
:
//SPS
if
(
m_Timer
.
elapsedTime
()
>=
m_ui32SegmentDuration
*
1000
)
{
if
(
stampInc
>=
m_ui32SegmentDuration
*
1000
)
{
m_ui32LastStamp
=
timeStamp
;
//关闭文件
m_ts
.
clear
();
auto
strTmpFileName
=
StrPrinter
<<
m_strOutputPrefix
<<
'-'
<<
(
++
m_ui64TsCnt
)
<<
".ts"
<<
endl
;
...
...
@@ -139,8 +145,7 @@ void HLSMaker::inputH264(void *data, uint32_t length, uint32_t timeStamp, int ty
return
;
}
//记录切片时间
m_iDurations
.
push_back
(
m_Timer
.
elapsedTime
());
m_Timer
.
resetTime
();
m_iDurations
.
push_back
(
stampInc
);
if
(
removets
()){
//删除老的时间戳
m_iDurations
.
pop_front
();
...
...
@@ -149,10 +154,10 @@ void HLSMaker::inputH264(void *data, uint32_t length, uint32_t timeStamp, int ty
}
case
1
:
//P
//insert aud frame before p and SPS frame
m_ts
.
inputH264
(
"\x0\x0\x0\x1\x9
\xf0
"
,
6
,
timeStamp
);
m_ts
.
inputH264
(
"\x0\x0\x0\x1\x9
\xf0
"
,
6
,
timeStamp
*
90
);
case
5
:
//IDR
case
8
:
//PPS
m_ts
.
inputH264
((
char
*
)
data
,
length
,
timeStamp
);
m_ts
.
inputH264
((
char
*
)
data
,
length
,
timeStamp
*
90
);
break
;
default
:
break
;
...
...
@@ -160,15 +165,15 @@ void HLSMaker::inputH264(void *data, uint32_t length, uint32_t timeStamp, int ty
}
void
HLSMaker
::
inputAAC
(
void
*
data
,
uint32_t
length
,
uint32_t
timeStamp
)
{
m_ts
.
inputAAC
((
char
*
)
data
,
length
,
timeStamp
);
m_ts
.
inputAAC
((
char
*
)
data
,
length
,
timeStamp
*
90
);
}
bool
HLSMaker
::
removets
()
{
if
(
m_ui64TsCnt
<
=
m_ui32NumSegments
)
{
if
(
m_ui64TsCnt
<
m_ui32NumSegments
+
2
)
{
return
false
;
}
File
::
delete_file
((
StrPrinter
<<
m_strOutputPrefix
<<
"-"
<<
m_ui64TsCnt
-
m_ui32NumSegments
-
1
<<
m_ui64TsCnt
-
m_ui32NumSegments
-
2
<<
".ts"
<<
endl
).
data
());
return
true
;
}
...
...
This diff is collapsed.
Click to expand it.
src/MediaFile/HLSMaker.h
查看文件 @
730db98a
...
...
@@ -49,13 +49,13 @@ public:
virtual
~
HLSMaker
();
//时间戳:参考频率
90
000
//时间戳:参考频率
1
000
void
inputH264
(
void
*
pData
,
uint32_t
ui32Length
,
uint32_t
ui32TimeStamp
,
int
iType
);
//时间戳:参考频率
90
000
//时间戳:参考频率
1
000
void
inputAAC
(
void
*
pData
,
uint32_t
ui32Length
,
uint32_t
ui32TimeStamp
);
...
...
@@ -68,7 +68,7 @@ private:
uint32_t
m_ui32NumSegments
;
uint64_t
m_ui64TsCnt
;
uint32_t
m_ui32BufSize
;
Ticker
m_Timer
;
uint32_t
m_ui32LastStamp
;
std
::
deque
<
int
>
m_iDurations
;
bool
write_index_file
(
int
iFirstSegment
,
unsigned
int
uiLastSegment
,
int
iEnd
);
...
...
This diff is collapsed.
Click to expand it.
src/MediaFile/MediaRecorder.cpp
查看文件 @
730db98a
...
...
@@ -76,7 +76,7 @@ MediaRecorder::~MediaRecorder() {
void
MediaRecorder
::
inputH264
(
void
*
pData
,
uint32_t
ui32Length
,
uint32_t
ui32TimeStamp
,
int
iType
)
{
if
(
m_hlsMaker
){
m_hlsMaker
->
inputH264
(
pData
,
ui32Length
,
ui32TimeStamp
*
90
,
iType
);
m_hlsMaker
->
inputH264
(
pData
,
ui32Length
,
ui32TimeStamp
,
iType
);
}
#ifdef ENABLE_MP4V2
if
(
m_mp4Maker
){
...
...
@@ -87,7 +87,7 @@ void MediaRecorder::inputH264(void* pData, uint32_t ui32Length, uint32_t ui32Tim
void
MediaRecorder
::
inputAAC
(
void
*
pData
,
uint32_t
ui32Length
,
uint32_t
ui32TimeStamp
)
{
if
(
m_hlsMaker
){
m_hlsMaker
->
inputAAC
(
pData
,
ui32Length
,
ui32TimeStamp
*
90
);
m_hlsMaker
->
inputAAC
(
pData
,
ui32Length
,
ui32TimeStamp
);
}
#ifdef ENABLE_MP4V2
if
(
m_mp4Maker
){
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论