mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
fix the on_hls.ts_url bug.
This commit is contained in:
parent
34d1ce9922
commit
2830ee12c1
7 changed files with 60 additions and 3 deletions
|
@ -557,6 +557,12 @@ int SrsHlsMuxer::segment_open(int64_t segment_start_dts)
|
||||||
current->uri += hls_entry_prefix;
|
current->uri += hls_entry_prefix;
|
||||||
if (!hls_entry_prefix.empty() && !srs_string_ends_with(hls_entry_prefix, "/")) {
|
if (!hls_entry_prefix.empty() && !srs_string_ends_with(hls_entry_prefix, "/")) {
|
||||||
current->uri += "/";
|
current->uri += "/";
|
||||||
|
|
||||||
|
// add the http dir to uri.
|
||||||
|
string http_dir = srs_path_dirname(m3u8_url);
|
||||||
|
if (!http_dir.empty()) {
|
||||||
|
current->uri += http_dir + "/";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
current->uri += ts_url;
|
current->uri += ts_url;
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ using namespace std;
|
||||||
#include <srs_app_config.hpp>
|
#include <srs_app_config.hpp>
|
||||||
#include <srs_kernel_utility.hpp>
|
#include <srs_kernel_utility.hpp>
|
||||||
#include <srs_app_http_conn.hpp>
|
#include <srs_app_http_conn.hpp>
|
||||||
|
#include <srs_app_utility.hpp>
|
||||||
|
|
||||||
#define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS)
|
#define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS)
|
||||||
|
|
||||||
|
@ -300,6 +301,12 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri
|
||||||
int client_id = cid;
|
int client_id = cid;
|
||||||
std::string cwd = _srs_config->cwd();
|
std::string cwd = _srs_config->cwd();
|
||||||
|
|
||||||
|
// the ts_url is under the same dir of m3u8_url.
|
||||||
|
string prefix = srs_path_dirname(m3u8_url);
|
||||||
|
if (!prefix.empty() && !srs_string_is_http(ts_url)) {
|
||||||
|
ts_url = prefix + "/" + ts_url;
|
||||||
|
}
|
||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << SRS_JOBJECT_START
|
ss << SRS_JOBJECT_START
|
||||||
<< SRS_JFIELD_STR("action", "on_hls") << SRS_JFIELD_CONT
|
<< SRS_JFIELD_STR("action", "on_hls") << SRS_JFIELD_CONT
|
||||||
|
@ -341,7 +348,7 @@ int SrsHttpHooks::on_hls_notify(int cid, std::string url, SrsRequest* req, std::
|
||||||
int client_id = cid;
|
int client_id = cid;
|
||||||
std::string cwd = _srs_config->cwd();
|
std::string cwd = _srs_config->cwd();
|
||||||
|
|
||||||
if (srs_string_starts_with(ts_url, "http://") || srs_string_starts_with(ts_url, "https://")) {
|
if (srs_string_is_http(ts_url)) {
|
||||||
url = ts_url;
|
url = ts_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#ifdef SRS_OSX
|
#ifdef SRS_OSX
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
@ -45,6 +46,7 @@ using namespace std;
|
||||||
#include <srs_protocol_kbps.hpp>
|
#include <srs_protocol_kbps.hpp>
|
||||||
#include <srs_protocol_json.hpp>
|
#include <srs_protocol_json.hpp>
|
||||||
#include <srs_kernel_stream.hpp>
|
#include <srs_kernel_stream.hpp>
|
||||||
|
#include <srs_kernel_utility.hpp>
|
||||||
|
|
||||||
// the longest time to wait for a process to quit.
|
// the longest time to wait for a process to quit.
|
||||||
#define SRS_PROCESS_QUIT_TIMEOUT_MS 1000
|
#define SRS_PROCESS_QUIT_TIMEOUT_MS 1000
|
||||||
|
@ -1349,6 +1351,27 @@ string srs_get_peer_ip(int fd)
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool srs_string_is_http(string url)
|
||||||
|
{
|
||||||
|
return srs_string_starts_with(url, "http://", "https://");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool srs_is_digit_number(const string& str)
|
||||||
|
{
|
||||||
|
if (str.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int v = ::atoi(str.c_str());
|
||||||
|
int powv = (int)pow(10, str.length() - 1);
|
||||||
|
return v / powv >= 1 && v / powv <= 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool srs_is_boolean(const string& str)
|
||||||
|
{
|
||||||
|
return str == "true" || str == "false";
|
||||||
|
}
|
||||||
|
|
||||||
void srs_api_dump_summaries(std::stringstream& ss)
|
void srs_api_dump_summaries(std::stringstream& ss)
|
||||||
{
|
{
|
||||||
SrsRusage* r = srs_get_system_rusage();
|
SrsRusage* r = srs_get_system_rusage();
|
||||||
|
|
|
@ -668,6 +668,21 @@ extern int srs_get_local_port(int fd);
|
||||||
// where peer ip is the client public ip which connected to server.
|
// where peer ip is the client public ip which connected to server.
|
||||||
extern std::string srs_get_peer_ip(int fd);
|
extern std::string srs_get_peer_ip(int fd);
|
||||||
|
|
||||||
|
// whether the url is starts with http:// or https://
|
||||||
|
extern bool srs_string_is_http(std::string url);
|
||||||
|
|
||||||
|
// whether string is digit number
|
||||||
|
// is_digit("1234567890") === true
|
||||||
|
// is_digit("0123456789") === false
|
||||||
|
// is_digit("1234567890a") === false
|
||||||
|
// is_digit("a1234567890") === false
|
||||||
|
extern bool srs_is_digit_number(const std::string& str);
|
||||||
|
// whether string is boolean
|
||||||
|
// is_bool("true") == true
|
||||||
|
// is_bool("false") == true
|
||||||
|
// otherwise, false.
|
||||||
|
extern bool srs_is_boolean(const std::string& str);
|
||||||
|
|
||||||
// dump summaries for /api/v1/summaries.
|
// dump summaries for /api/v1/summaries.
|
||||||
extern void srs_api_dump_summaries(std::stringstream& ss);
|
extern void srs_api_dump_summaries(std::stringstream& ss);
|
||||||
|
|
||||||
|
|
|
@ -279,6 +279,11 @@ bool srs_string_starts_with(string str, string flag)
|
||||||
return str.find(flag) == 0;
|
return str.find(flag) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool srs_string_starts_with(string str, string flag0, string flag1)
|
||||||
|
{
|
||||||
|
return srs_string_starts_with(str, flag0) || srs_string_starts_with(str, flag1);
|
||||||
|
}
|
||||||
|
|
||||||
bool srs_string_contains(string str, string flag)
|
bool srs_string_contains(string str, string flag)
|
||||||
{
|
{
|
||||||
return str.find(flag) != string::npos;
|
return str.find(flag) != string::npos;
|
||||||
|
|
|
@ -67,6 +67,7 @@ extern std::string srs_string_remove(std::string str, std::string remove_chars);
|
||||||
extern bool srs_string_ends_with(std::string str, std::string flag);
|
extern bool srs_string_ends_with(std::string str, std::string flag);
|
||||||
// whether string starts with
|
// whether string starts with
|
||||||
extern bool srs_string_starts_with(std::string str, std::string flag);
|
extern bool srs_string_starts_with(std::string str, std::string flag);
|
||||||
|
extern bool srs_string_starts_with(std::string str, std::string flag0, std::string flag1);
|
||||||
// whether string contains with
|
// whether string contains with
|
||||||
extern bool srs_string_contains(std::string str, std::string flag);
|
extern bool srs_string_contains(std::string str, std::string flag);
|
||||||
|
|
||||||
|
|
|
@ -459,7 +459,7 @@ int SrsIngestSrsInput::parseM3u8(SrsHttpUri* url, double& td, double& duration)
|
||||||
std::string m3u8_url = body.substr(0, pos);
|
std::string m3u8_url = body.substr(0, pos);
|
||||||
body = body.substr(pos + 1);
|
body = body.substr(pos + 1);
|
||||||
|
|
||||||
if (!srs_string_starts_with(m3u8_url, "http://")) {
|
if (!srs_string_is_http(m3u8_url)) {
|
||||||
m3u8_url = srs_path_dirname(url->get_url()) + "/" + m3u8_url;
|
m3u8_url = srs_path_dirname(url->get_url()) + "/" + m3u8_url;
|
||||||
}
|
}
|
||||||
srs_trace("parse sub m3u8, url=%s", m3u8_url.c_str());
|
srs_trace("parse sub m3u8, url=%s", m3u8_url.c_str());
|
||||||
|
@ -593,7 +593,7 @@ int SrsIngestSrsInput::SrsTsPiece::fetch(string m3u8)
|
||||||
SrsHttpClient client;
|
SrsHttpClient client;
|
||||||
|
|
||||||
std::string ts_url = url;
|
std::string ts_url = url;
|
||||||
if (!srs_string_starts_with(ts_url, "http://")) {
|
if (!srs_string_is_http(ts_url)) {
|
||||||
ts_url = srs_path_dirname(m3u8) + "/" + url;
|
ts_url = srs_path_dirname(m3u8) + "/" + url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue