diff --git a/lib/flv_tag.cpp b/lib/flv_tag.cpp index aac36565..432ab869 100644 --- a/lib/flv_tag.cpp +++ b/lib/flv_tag.cpp @@ -818,9 +818,10 @@ unsigned int FLV::Tag::getDataLen(){ void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage){ size_t reTrack = INVALID_TRACK_ID; - toMeta(meta, amf_storage, reTrack); + std::map targetParams; + toMeta(meta, amf_storage, reTrack, targetParams); } -void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrack){ +void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrack, const std::map &targetParams){ std::string trackType; switch (data[0]){ case 0x09: trackType = "video"; break; // video @@ -849,6 +850,9 @@ void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrac if (reTrack == INVALID_TRACK_ID){ reTrack = meta.addTrack(); meta.setID(reTrack, getTrackID()); + if (targetParams.count("lang")){ + meta.setLang(reTrack, targetParams.at("lang")); + } } std::string codec = meta.getCodec(reTrack); diff --git a/lib/flv_tag.h b/lib/flv_tag.h index dff8eda3..54527615 100644 --- a/lib/flv_tag.h +++ b/lib/flv_tag.h @@ -54,7 +54,7 @@ namespace FLV{ bool DTSCAudioInit(DTSC::Meta &meta, uint32_t aTrack); bool DTSCMetaInit(const DTSC::Meta &M, std::set &selTracks); void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage); - void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrack); + void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrack, const std::map &targetParams); bool MemLoader(char *D, unsigned int S, unsigned int &P); bool FileLoader(FILE *f); unsigned int getTrackID(); diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index d5979c27..4522e41f 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -721,6 +721,15 @@ namespace Mist{ } if (amfData.getContentP(3)){ streamName = Encodings::URL::decode(amfData.getContentP(3)->StrValue()); + + // handle variables + if (streamName.find('?') != std::string::npos){ + std::string tmpVars = streamName.substr(streamName.find('?') + 1); + streamName = streamName.substr(0, streamName.find('?')); + Util::Config::streamName = streamName; + HTTP::parseVars(tmpVars, targetParams); + } + Util::Config::streamName = streamName; reqUrl += "/" + streamName; // LTS @@ -1248,7 +1257,7 @@ namespace Mist{ size_t reTrack = next.cs_id * 3 + (F.data[0] == 0x09 ? 1 : (F.data[0] == 0x08 ? 2 : 3)); if (!reTrackToID.count(reTrack)){reTrackToID[reTrack] = INVALID_TRACK_ID;} - F.toMeta(meta, *amf_storage, reTrackToID[reTrack]); + F.toMeta(meta, *amf_storage, reTrackToID[reTrack], targetParams); if (F.getDataLen() && !(F.needsInitData() && F.isInitData())){ uint64_t tagTime = next.timestamp; if (!M.getBootMsOffset()){