Commit 19d6f1a0 by xiongguangjie Committed by GitHub

FLV player avoid script data first element not string (#2679 #2680)

兼容不规范的flv流,比如livegbs产生的flv流metadata flv tag解析异常
parent a31108cc
......@@ -91,21 +91,26 @@ void FlvSplitter::onRecvContent(const char *data, size_t len) {
case MSG_DATA3: {
BufferLikeString buffer(string(data, len));
AMFDecoder dec(buffer, _type == MSG_DATA3 ? 3 : 0);
std::string type = dec.load<std::string>();
auto first = dec.load<AMFValue>();
bool flag = true;
if (type == "@setDataFrame") {
std::string type = dec.load<std::string>();
if (type == "onMetaData") {
if (first.type() == AMFType::AMF_STRING) {
auto type = first.as_string();
if (type == "@setDataFrame") {
type = dec.load<std::string>();
if (type == "onMetaData") {
flag = onRecvMetadata(dec.load<AMFValue>());
} else {
WarnL << "unknown type:" << type;
}
} else if (type == "onMetaData") {
flag = onRecvMetadata(dec.load<AMFValue>());
} else {
WarnL << "unknown type:" << type;
WarnL << "unknown notify:" << type;
}
} else if (type == "onMetaData") {
flag = onRecvMetadata(dec.load<AMFValue>());
} else {
WarnL << "unknown notify:" << type;
WarnL << "Parse flv script data failed, invalid amf value: " << first.to_string();
}
if(!flag){
if (!flag) {
throw std::invalid_argument("check rtmp metadata failed");
}
return;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论