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
d3638716
Commit
d3638716
authored
4 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复一些mp4点播不支持的问题
parent
048b30c4
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
19 行增加
和
12 行删除
+19
-12
3rdpart/media-server
+1
-1
src/Record/MP4Demuxer.cpp
+9
-3
src/Record/MP4Demuxer.h
+1
-1
src/Record/MP4Reader.cpp
+8
-7
没有找到文件。
media-server
@
24519a59
Subproject commit
97cf5e47a5af1ff3d4d187f3ebffd9254595df7
5
Subproject commit
24519a594c2c634b21fbe09fad28d54c4eba088
5
This diff is collapsed.
Click to expand it.
src/Record/MP4Demuxer.cpp
查看文件 @
d3638716
...
...
@@ -142,7 +142,9 @@ struct Context{
BufferRaw
::
Ptr
buffer
;
};
Frame
::
Ptr
MP4Demuxer
::
readFrame
(
bool
&
keyFrame
)
{
Frame
::
Ptr
MP4Demuxer
::
readFrame
(
bool
&
keyFrame
,
bool
&
eof
)
{
keyFrame
=
false
;
eof
=
false
;
static
mov_reader_onread
mov_reader_onread
=
[](
void
*
param
,
uint32_t
track_id
,
const
void
*
buffer
,
size_t
bytes
,
int64_t
pts
,
int64_t
dts
,
int
flags
)
{
Context
*
ctx
=
(
Context
*
)
param
;
ctx
->
pts
=
pts
;
...
...
@@ -162,17 +164,21 @@ Frame::Ptr MP4Demuxer::readFrame(bool &keyFrame) {
Context
ctx
=
{
this
,
0
};
auto
ret
=
mov_reader_read2
(
_mov_reader
.
get
(),
mov_onalloc
,
mov_reader_onread
,
&
ctx
);
switch
(
ret
)
{
case
0
:
case
0
:
{
eof
=
true
;
return
nullptr
;
}
case
1
:
{
keyFrame
=
ctx
.
flags
&
MOV_AV_FLAG_KEYFREAME
;
return
makeFrame
(
ctx
.
track_id
,
ctx
.
buffer
,
ctx
.
pts
,
ctx
.
dts
);
}
default
:
default
:
{
eof
=
true
;
WarnL
<<
"读取mp4文件数据失败:"
<<
ret
;
return
nullptr
;
}
}
}
...
...
This diff is collapsed.
Click to expand it.
src/Record/MP4Demuxer.h
查看文件 @
d3638716
...
...
@@ -22,7 +22,7 @@ public:
MP4Demuxer
(
const
char
*
file
);
~
MP4Demuxer
()
override
;
int64_t
seekTo
(
int64_t
stamp_ms
);
Frame
::
Ptr
readFrame
(
bool
&
keyFrame
);
Frame
::
Ptr
readFrame
(
bool
&
keyFrame
,
bool
&
eof
);
vector
<
Track
::
Ptr
>
getTracks
(
bool
trackReady
)
const
override
;
uint64_t
getDurationMS
()
const
;
private
:
...
...
This diff is collapsed.
Click to expand it.
src/Record/MP4Reader.cpp
查看文件 @
d3638716
...
...
@@ -48,11 +48,10 @@ MP4Reader::MP4Reader(const string &strVhost,const string &strApp, const string &
bool
MP4Reader
::
readSample
()
{
bool
keyFrame
=
false
;
bool
eof
=
false
;
while
(
true
)
{
auto
frame
=
_demuxer
->
readFrame
(
keyFrame
);
while
(
!
eof
)
{
auto
frame
=
_demuxer
->
readFrame
(
keyFrame
,
eof
);
if
(
!
frame
)
{
eof
=
true
;
break
;
continue
;
}
_mediaMuxer
->
inputFrame
(
frame
);
if
(
frame
->
dts
()
>
getCurrentStamp
())
{
...
...
@@ -122,11 +121,12 @@ bool MP4Reader::seekTo(uint32_t ui32Stamp){
}
//搜索到下一帧关键帧
bool
keyFrame
=
false
;
while
(
true
)
{
auto
frame
=
_demuxer
->
readFrame
(
keyFrame
);
bool
eof
=
false
;
while
(
!
eof
)
{
auto
frame
=
_demuxer
->
readFrame
(
keyFrame
,
eof
);
if
(
!
frame
){
//文件读完了都未找到下一帧关键帧
return
fals
e
;
continu
e
;
}
if
(
keyFrame
||
frame
->
keyFrame
()
||
frame
->
configFrame
()){
//定位到key帧
...
...
@@ -136,6 +136,7 @@ bool MP4Reader::seekTo(uint32_t ui32Stamp){
return
true
;
}
}
return
false
;
}
bool
MP4Reader
::
close
(
MediaSource
&
sender
,
bool
force
){
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论