diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index a8b377749..9d106768a 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -754,6 +754,7 @@ vhost hooks.callback.srs.com { # "client_id": 1985, # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", # "stream": "livestream", + # "duration": 9.36, // in seconds # "cwd": "/usr/local/srs", # "file": "./objs/nginx/html/live/livestream.1420254068776-100.ts", # "seq_no": 100 diff --git a/trunk/research/api-server/server.py b/trunk/research/api-server/server.py index 0c7d900f9..047718f86 100755 --- a/trunk/research/api-server/server.py +++ b/trunk/research/api-server/server.py @@ -328,8 +328,11 @@ class RESTHls(object): { "action": "on_dvr", "client_id": 1985, - "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + "ip": "192.168.1.10", + "vhost": "video.test.com", + "app": "live", "stream": "livestream", + "duration": 9.68, // in seconds "cwd": "/usr/local/srs", "file": "./objs/nginx/html/live/livestream.1420254068776-100.ts", "seq_no": 100 @@ -368,8 +371,8 @@ class RESTHls(object): def __on_hls(self, req): code = Error.success - trace("srs %s: client id=%s, ip=%s, vhost=%s, app=%s, stream=%s, cwd=%s, file=%s, seq_no=%s"%( - req["action"], req["client_id"], req["ip"], req["vhost"], req["app"], req["stream"], + trace("srs %s: client id=%s, ip=%s, vhost=%s, app=%s, stream=%s, duration=%s, cwd=%s, file=%s, seq_no=%s"%( + req["action"], req["client_id"], req["ip"], req["vhost"], req["app"], req["stream"], req["duration"], req["cwd"], req["file"], req["seq_no"] )) diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index e3caaa2be..7d064720a 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -170,11 +170,12 @@ void SrsHlsSegment::update_duration(int64_t current_frame_dts) return; } -SrsDvrAsyncCallOnHls::SrsDvrAsyncCallOnHls(SrsRequest* r, string p, int s) +SrsDvrAsyncCallOnHls::SrsDvrAsyncCallOnHls(SrsRequest* r, string p, int s, double d) { req = r; path = p; seq_no = s; + duration = d; } SrsDvrAsyncCallOnHls::~SrsDvrAsyncCallOnHls() @@ -199,7 +200,7 @@ int SrsDvrAsyncCallOnHls::call() int sn = seq_no; for (int i = 0; i < (int)on_hls->args.size(); i++) { std::string url = on_hls->args.at(i); - if ((ret = SrsHttpHooks::on_hls(url, req, file, sn)) != ERROR_SUCCESS) { + if ((ret = SrsHttpHooks::on_hls(url, req, file, sn, duration)) != ERROR_SUCCESS) { srs_error("hook client on_hls failed. url=%s, ret=%d", url.c_str(), ret); return ret; } diff --git a/trunk/src/app/srs_app_hls.hpp b/trunk/src/app/srs_app_hls.hpp index 5bb54280a..e0d17e8f3 100644 --- a/trunk/src/app/srs_app_hls.hpp +++ b/trunk/src/app/srs_app_hls.hpp @@ -164,8 +164,9 @@ private: std::string path; int seq_no; SrsRequest* req; + double duration; public: - SrsDvrAsyncCallOnHls(SrsRequest* r, std::string p, int s); + SrsDvrAsyncCallOnHls(SrsRequest* r, std::string p, int s, double d); virtual ~SrsDvrAsyncCallOnHls(); public: virtual int call(); diff --git a/trunk/src/app/srs_app_http_hooks.cpp b/trunk/src/app/srs_app_http_hooks.cpp index 618de8ebb..6c717a29e 100644 --- a/trunk/src/app/srs_app_http_hooks.cpp +++ b/trunk/src/app/srs_app_http_hooks.cpp @@ -287,7 +287,7 @@ int SrsHttpHooks::on_dvr(string url, SrsRequest* req, string file) return ret; } -int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, int sn) +int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, int sn, double duration) { int ret = ERROR_SUCCESS; @@ -302,6 +302,7 @@ int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, int sn) << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT + << SRS_JFIELD_ORG("duration", duration) << SRS_JFIELD_CONT << SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT << SRS_JFIELD_STR("file", file) << SRS_JFIELD_CONT << SRS_JFIELD_ORG("seq_no", sn) diff --git a/trunk/src/app/srs_app_http_hooks.hpp b/trunk/src/app/srs_app_http_hooks.hpp index de64bef29..70a870f0a 100644 --- a/trunk/src/app/srs_app_http_hooks.hpp +++ b/trunk/src/app/srs_app_http_hooks.hpp @@ -102,8 +102,9 @@ public: * ignore if empty. * @param file the ts file path, can be relative or absolute path. * @param sn the seq_no, the sequence number of ts in hls/m3u8. + * @param duration the segment duration in seconds. */ - static int on_hls(std::string url, SrsRequest* req, std::string file, int sn); + static int on_hls(std::string url, SrsRequest* req, std::string file, int sn, double duration); private: static int do_post(std::string url, std::string req, int& code, std::string& res); };