Allow setting RTMP language

This commit is contained in:
Thulinma 2020-03-11 16:40:50 +01:00
parent a8c7bc5d27
commit a3e0d1ac85
3 changed files with 17 additions and 4 deletions

View file

@ -818,9 +818,10 @@ unsigned int FLV::Tag::getDataLen(){
void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage){ void FLV::Tag::toMeta(DTSC::Meta &meta, AMF::Object &amf_storage){
size_t reTrack = INVALID_TRACK_ID; size_t reTrack = INVALID_TRACK_ID;
toMeta(meta, amf_storage, reTrack); std::map<std::string, std::string> 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<std::string, std::string> &targetParams){
std::string trackType; std::string trackType;
switch (data[0]){ switch (data[0]){
case 0x09: trackType = "video"; break; // video 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){ if (reTrack == INVALID_TRACK_ID){
reTrack = meta.addTrack(); reTrack = meta.addTrack();
meta.setID(reTrack, getTrackID()); meta.setID(reTrack, getTrackID());
if (targetParams.count("lang")){
meta.setLang(reTrack, targetParams.at("lang"));
}
} }
std::string codec = meta.getCodec(reTrack); std::string codec = meta.getCodec(reTrack);

View file

@ -54,7 +54,7 @@ namespace FLV{
bool DTSCAudioInit(DTSC::Meta &meta, uint32_t aTrack); bool DTSCAudioInit(DTSC::Meta &meta, uint32_t aTrack);
bool DTSCMetaInit(const DTSC::Meta &M, std::set<long unsigned int> &selTracks); bool DTSCMetaInit(const DTSC::Meta &M, std::set<long unsigned int> &selTracks);
void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage); 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<std::string, std::string> &targetParams);
bool MemLoader(char *D, unsigned int S, unsigned int &P); bool MemLoader(char *D, unsigned int S, unsigned int &P);
bool FileLoader(FILE *f); bool FileLoader(FILE *f);
unsigned int getTrackID(); unsigned int getTrackID();

View file

@ -721,6 +721,15 @@ namespace Mist{
} }
if (amfData.getContentP(3)){ if (amfData.getContentP(3)){
streamName = Encodings::URL::decode(amfData.getContentP(3)->StrValue()); 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; Util::Config::streamName = streamName;
reqUrl += "/" + streamName; // LTS 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)); 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;} 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())){ if (F.getDataLen() && !(F.needsInitData() && F.isInitData())){
uint64_t tagTime = next.timestamp; uint64_t tagTime = next.timestamp;
if (!M.getBootMsOffset()){ if (!M.getBootMsOffset()){