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

兼容不规范的flv流,比如livegbs产生的flv流metadata flv tag解析异常
This commit is contained in:
xiongguangjie 2023-07-20 17:13:26 +08:00 committed by GitHub
parent a31108cc51
commit 19d6f1a003
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,10 +91,12 @@ 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 (first.type() == AMFType::AMF_STRING) {
auto type = first.as_string();
if (type == "@setDataFrame") {
std::string type = dec.load<std::string>();
type = dec.load<std::string>();
if (type == "onMetaData") {
flag = onRecvMetadata(dec.load<AMFValue>());
} else {
@ -105,7 +107,10 @@ void FlvSplitter::onRecvContent(const char *data, size_t len) {
} else {
WarnL << "unknown notify:" << type;
}
if(!flag){
} else {
WarnL << "Parse flv script data failed, invalid amf value: " << first.to_string();
}
if (!flag) {
throw std::invalid_argument("check rtmp metadata failed");
}
return;