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
6922d82c
Commit
6922d82c
authored
Jul 25, 2019
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rtmp解复用支持无内存拷贝
hls生成支持输入无0x 00 00 01的H264/H265数据
parent
d2a889b4
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
31 行增加
和
6 行删除
+31
-6
3rdpart/media-server
+1
-1
src/Extension/H264.h
+18
-4
src/Extension/H264Rtmp.cpp
+6
-0
src/MediaFile/TsMuxer.cpp
+6
-1
没有找到文件。
media-server
@
e399b938
Subproject commit
0e726dd4e06ab4ed3723deaf3f73386e100bb10d
Subproject commit
e399b93802610dcf574ff64bcb7677572cd028c1
src/Extension/H264.h
查看文件 @
6922d82c
...
...
@@ -92,6 +92,11 @@ public:
};
/**
* 防止内存拷贝的H264类
* 用户可以通过该类型快速把一个指针无拷贝的包装成Frame类
* 该类型在DevChannel中有使用
*/
class
H264FrameNoCacheAble
:
public
FrameNoCacheAble
{
public
:
typedef
std
::
shared_ptr
<
H264FrameNoCacheAble
>
Ptr
;
...
...
@@ -117,17 +122,26 @@ public:
}
};
/**
* 一个H264Frame类中可以有多个帧,他们通过 0x 00 00 01 分隔
* ZLMediaKit会先把这种复合帧split成单个帧然后再处理
* 一个复合帧可以通过无内存拷贝的方式切割成多个H264FrameSubFrame
* 提供该类的目的是切换复合帧时防止内存拷贝,提高性能
*/
class
H264FrameSubFrame
:
public
H264FrameNoCacheAble
{
public
:
typedef
std
::
shared_ptr
<
H264FrameSubFrame
>
Ptr
;
H264FrameSubFrame
(
const
Frame
::
Ptr
&
strongRef
,
H264FrameSubFrame
(
const
Frame
::
Ptr
&
parent_frame
,
char
*
ptr
,
uint32_t
size
,
int
prefixeSize
)
:
H264FrameNoCacheAble
(
ptr
,
size
,
strongRef
->
dts
(),
strongRef
->
pts
(),
prefixeSize
){
_strongRef
=
strongRef
;
int
prefixeSize
)
:
H264FrameNoCacheAble
(
ptr
,
size
,
parent_frame
->
dts
(),
parent_frame
->
pts
(),
prefixeSize
){
_parent_frame
=
parent_frame
;
}
bool
cacheAble
()
const
override
{
return
_parent_frame
->
cacheAble
();
}
private
:
Frame
::
Ptr
_
strongRef
;
Frame
::
Ptr
_
parent_frame
;
};
/**
...
...
src/Extension/H264Rtmp.cpp
查看文件 @
6922d82c
...
...
@@ -108,6 +108,7 @@ inline void H264RtmpDecoder::onGetH264_l(const char* pcData, int iLen, uint32_t
}
}
inline
void
H264RtmpDecoder
::
onGetH264
(
const
char
*
pcData
,
int
iLen
,
uint32_t
dts
,
uint32_t
pts
)
{
#if 0
_h264frame->type = H264_TYPE(pcData[0]);
_h264frame->timeStamp = dts;
_h264frame->ptsStamp = pts;
...
...
@@ -117,6 +118,11 @@ inline void H264RtmpDecoder::onGetH264(const char* pcData, int iLen, uint32_t dt
//写入环形缓存
RtmpCodec::inputFrame(_h264frame);
_h264frame = obtainFrame();
#else
//防止内存拷贝,这样产生的264帧不会有0x00 00 01头
auto
frame
=
std
::
make_shared
<
H264FrameNoCacheAble
>
((
char
*
)
pcData
,
iLen
,
dts
,
pts
,
0
);
RtmpCodec
::
inputFrame
(
frame
);
#endif
}
...
...
src/MediaFile/TsMuxer.cpp
查看文件 @
6922d82c
...
...
@@ -70,7 +70,12 @@ void TsMuxer::inputFrame(const Frame::Ptr &frame) {
if
(
_frameCached
.
size
()
!=
1
){
string
merged
;
_frameCached
.
for_each
([
&
](
const
Frame
::
Ptr
&
frame
){
merged
.
append
(
frame
->
data
(),
frame
->
size
());
if
(
frame
->
prefixSize
()){
merged
.
append
(
frame
->
data
(),
frame
->
size
());
}
else
{
merged
.
append
(
"
\x00\x00\x00\x01
"
,
4
);
merged
.
append
(
frame
->
data
(),
frame
->
size
());
}
});
merged_frame
=
std
::
make_shared
<
BufferString
>
(
std
::
move
(
merged
));
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论