diff --git a/libarmbox/playback_libeplayer3.cpp b/libarmbox/playback_libeplayer3.cpp index 6d3ac35..d89e9af 100644 --- a/libarmbox/playback_libeplayer3.cpp +++ b/libarmbox/playback_libeplayer3.cpp @@ -100,6 +100,26 @@ void cPlayback::Close(void) } } +std::string cPlayback::extractParam(const std::string &hdrs, const std::string ¶mName) +{ + size_t paramPos = hdrs.find(paramName); + if (paramPos != std::string::npos) { + size_t valuePos = paramPos + paramName.length(); + size_t valueEndPos = hdrs.find('&', valuePos); + if (valueEndPos == std::string::npos) { + valueEndPos = hdrs.length(); + } + std::string value = hdrs.substr(valuePos, valueEndPos - valuePos); + + size_t trailingSpacePos = value.find_last_not_of(" \t\r\n"); + if (trailingSpacePos != std::string::npos) { + value.erase(trailingSpacePos + 1); + } + return value; + } + return ""; +} + bool cPlayback::Start(std::string filename, std::string headers, std::string filename2) { return Start((char *) filename.c_str(), 0, 0, 0, 0, 0, headers, filename2); @@ -142,17 +162,27 @@ bool cPlayback::Start(char *filename, int vpid, int vtype, int apid, int ac3, in if (isHTTP && headers.empty()) { - size_t pos = file.find('#'); - if (pos != std::string::npos) - { - headers = file.substr(pos + 1); - pos = headers.find("User-Agent="); - if (pos != std::string::npos) - headers.replace(pos + 10, 1, ": "); + size_t pos = file.rfind('#'); + if (pos != std::string::npos) { + std::string val; + std::string hdrs = file.substr(pos + 1); + + val = extractParam(hdrs, "User-Agent="); + if (!val.empty()) { + headers += "User-Agent: " + val + "\n"; + } + val = extractParam(hdrs, "Referer="); + if (!val.empty()) { + headers += "Referer: " + val + "\n"; + } + if (!headers.empty()) { + file = file.substr(0, pos); + } } } if (!headers.empty()) { + printf("Headers List\n%s", headers.c_str()); const char hkey[] = "headers"; ffmpeg_av_dict_set(hkey, headers.c_str(), 0); } diff --git a/libarmbox/playback_libeplayer3.h b/libarmbox/playback_libeplayer3.h index e984358..a4762c2 100644 --- a/libarmbox/playback_libeplayer3.h +++ b/libarmbox/playback_libeplayer3.h @@ -36,6 +36,7 @@ class cPlayback off64_t last_size; int init_jump; AVFormatContext *avft; + std::string extractParam(const std::string &hdrs, const std::string ¶mName); public: cPlayback(int num = 0); ~cPlayback();