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
8da9aee1
Commit
8da9aee1
authored
5 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
兼容无metadata的rtmp流
parent
9d43c38e
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
35 行增加
和
9 行删除
+35
-9
src/Rtmp/FlvMuxer.cpp
+9
-4
src/Rtmp/RtmpSession.cpp
+25
-5
src/Rtmp/RtmpSession.h
+1
-0
没有找到文件。
src/Rtmp/FlvMuxer.cpp
查看文件 @
8da9aee1
...
@@ -106,10 +106,15 @@ void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
...
@@ -106,10 +106,15 @@ void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
//PreviousTagSize0 Always 0
//PreviousTagSize0 Always 0
onWrite
(
std
::
make_shared
<
BufferRaw
>
((
char
*
)
&
size
,
4
));
onWrite
(
std
::
make_shared
<
BufferRaw
>
((
char
*
)
&
size
,
4
));
//metadata
AMFEncoder
invoke
;
auto
&
metadata
=
mediaSrc
->
getMetaData
();
invoke
<<
"onMetaData"
<<
mediaSrc
->
getMetaData
();
if
(
metadata
){
onWriteFlvTag
(
MSG_DATA
,
std
::
make_shared
<
BufferString
>
(
invoke
.
data
()),
0
);
//在有metadata的情况下才发送metadata
//其实metadata没什么用,有些推流器不产生metadata
AMFEncoder
invoke
;
invoke
<<
"onMetaData"
<<
metadata
;
onWriteFlvTag
(
MSG_DATA
,
std
::
make_shared
<
BufferString
>
(
invoke
.
data
()),
0
);
}
//config frame
//config frame
mediaSrc
->
getConfigFrame
([
&
](
const
RtmpPacket
::
Ptr
&
pkt
){
mediaSrc
->
getConfigFrame
([
&
](
const
RtmpPacket
::
Ptr
&
pkt
){
...
...
This diff is collapsed.
Click to expand it.
src/Rtmp/RtmpSession.cpp
查看文件 @
8da9aee1
...
@@ -262,10 +262,16 @@ void RtmpSession::sendPlayResponse(const string &err,const RtmpMediaSource::Ptr
...
@@ -262,10 +262,16 @@ void RtmpSession::sendPlayResponse(const string &err,const RtmpMediaSource::Ptr
status
.
set
(
"clientid"
,
"0"
);
status
.
set
(
"clientid"
,
"0"
);
sendReply
(
"onStatus"
,
nullptr
,
status
);
sendReply
(
"onStatus"
,
nullptr
,
status
);
// onMetaData
auto
&
metadata
=
src
->
getMetaData
();
invoke
.
clear
();
if
(
metadata
){
invoke
<<
"onMetaData"
<<
src
->
getMetaData
();
//在有metadata的情况下才发送metadata
sendResponse
(
MSG_DATA
,
invoke
.
data
());
//其实metadata没什么用,有些推流器不产生metadata
// onMetaData
invoke
.
clear
();
invoke
<<
"onMetaData"
<<
metadata
;
sendResponse
(
MSG_DATA
,
invoke
.
data
());
}
src
->
getConfigFrame
([
&
](
const
RtmpPacket
::
Ptr
&
pkt
)
{
src
->
getConfigFrame
([
&
](
const
RtmpPacket
::
Ptr
&
pkt
)
{
//DebugP(this)<<"send initial frame";
//DebugP(this)<<"send initial frame";
...
@@ -423,7 +429,9 @@ void RtmpSession::setMetaData(AMFDecoder &dec) {
...
@@ -423,7 +429,9 @@ void RtmpSession::setMetaData(AMFDecoder &dec) {
if
(
type
!=
"onMetaData"
)
{
if
(
type
!=
"onMetaData"
)
{
throw
std
::
runtime_error
(
"can only set metadata"
);
throw
std
::
runtime_error
(
"can only set metadata"
);
}
}
_pPublisherSrc
->
onGetMetaData
(
dec
.
load
<
AMFValue
>
());
auto
metadata
=
dec
.
load
<
AMFValue
>
();
//dumpMetadata(metadata);
_pPublisherSrc
->
onGetMetaData
(
metadata
);
}
}
void
RtmpSession
::
onProcessCmd
(
AMFDecoder
&
dec
)
{
void
RtmpSession
::
onProcessCmd
(
AMFDecoder
&
dec
)
{
...
@@ -542,4 +550,16 @@ void RtmpSession::setSocketFlags(){
...
@@ -542,4 +550,16 @@ void RtmpSession::setSocketFlags(){
(
*
this
)
<<
SocketFlags
(
SOCKET_DEFAULE_FLAGS
|
FLAG_MORE
);
(
*
this
)
<<
SocketFlags
(
SOCKET_DEFAULE_FLAGS
|
FLAG_MORE
);
}
}
}
}
void
RtmpSession
::
dumpMetadata
(
const
AMFValue
&
metadata
)
{
if
(
metadata
.
type
()
!=
AMF_OBJECT
&&
metadata
.
type
()
!=
AMF_ECMA_ARRAY
){
WarnL
<<
"invalid metedata type:"
<<
metadata
.
type
();
return
;
}
_StrPrinter
printer
;
metadata
.
object_for_each
([
&
](
const
string
&
key
,
const
AMFValue
&
val
){
printer
<<
"
\r\n
"
<<
key
<<
"
\t
:"
<<
val
.
to_string
()
;
});
InfoL
<<
_mediaInfo
.
_vhost
<<
" "
<<
_mediaInfo
.
_app
<<
" "
<<
_mediaInfo
.
_streamid
<<
(
string
)
printer
;
}
}
/* namespace mediakit */
}
/* namespace mediakit */
This diff is collapsed.
Click to expand it.
src/Rtmp/RtmpSession.h
查看文件 @
8da9aee1
...
@@ -87,6 +87,7 @@ private:
...
@@ -87,6 +87,7 @@ private:
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
setSocketFlags
();
void
setSocketFlags
();
string
getStreamId
(
const
string
&
str
);
string
getStreamId
(
const
string
&
str
);
void
dumpMetadata
(
const
AMFValue
&
metedata
);
private
:
private
:
std
::
string
_strTcUrl
;
std
::
string
_strTcUrl
;
MediaInfo
_mediaInfo
;
MediaInfo
_mediaInfo
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论