From: volpol Date: Sun, 22 Sep 2013 16:48:39 +0000 (+0000) Subject: stuff... X-Git-Url: https://git.packet-gain.de/?a=commitdiff_plain;h=480e621520f1d91fce12c5c4826a58ca34b46922;p=hls.git stuff... --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e4b155..e3cbfbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,6 @@ cmake_minimum_required(VERSION 2.6) project(HLS) set( CMAKE_C_FLAGS "-W -Wall -Wextra" ) include_directories(${HLS_SOURCE_DIR}) -add_definitions(-DUSE_TCP) -#add_definitions(-DDEBUG) -add_definitions(-DUSE_TC7200_WORKAROUND) add_executable(hls curly.c itemq.c m3u8.c memfile.c) include(FindPkgConfig) pkg_check_modules(CURL REQUIRED libcurl) diff --git a/config.h b/config.h new file mode 100644 index 0000000..219402a --- /dev/null +++ b/config.h @@ -0,0 +1,4 @@ +#define USE_TCP +//#define USE_MEMFILE +#define DEBUG +//#define USE_TC7200_WORKAROUND diff --git a/curly.c b/curly.c index a7850aa..80789ae 100644 --- a/curly.c +++ b/curly.c @@ -5,9 +5,12 @@ #include #include -#include "log.h" +#include "config.h" + +#include "log.h" #include "memfile.h" + #ifdef USE_TCP #include @@ -278,37 +281,32 @@ OUT: } -#ifdef USE_STREAM - -int curly_refresh_m3u8(const char *from_url, const char *to_file) { - -#else - +#ifdef USE_MEMFILE size_t mwrite_wrapper(void *ptr, size_t size, size_t nmemb, void *stream){ WHOAMI; return (mwrite(ptr, size, nmemb, (MFILE*)stream) * size); } +#endif -int curly_refresh_m3u8(const char *from_url, MFILE *f) { +int curly_refresh_m3u8(const char *from_url, void *src) { -#endif CURL *ch = NULL; CURLcode cc; -#ifdef USE_STREAM +#ifdef USE_MEMFILE + MFILE *f; +#else FILE *f; #endif int err = -1; WHOAMI; -#ifdef USE_STREAM - f = fopen(to_file, "w"); - + f = src; if (!f) goto OUT; -#endif + /* if (sch) @@ -332,7 +330,7 @@ int curly_refresh_m3u8(const char *from_url, MFILE *f) { goto OUT; -#ifndef USE_STREAM +#ifdef USE_MEMFILE WHOAMI; cc = curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, mwrite_wrapper); if (CURLE_OK != cc) @@ -353,10 +351,6 @@ int curly_refresh_m3u8(const char *from_url, MFILE *f) { OUT: -#ifdef USE_STREAM - if (f) - fclose(f); -#endif //if (ch && ch!=sch) curl_easy_cleanup(ch); if (ch) diff --git a/curly.h b/curly.h index de3a7ac..568a9d6 100644 --- a/curly.h +++ b/curly.h @@ -10,11 +10,7 @@ #include "memfile.h" int curly_init(void); void curly_cleanup(void); -#ifdef USE_STREAM -int curly_refresh_m3u8(const char *from_url, const char *to_file); -#else -int curly_refresh_m3u8(const char *from_url, MFILE *f); -#endif +int curly_refresh_m3u8(const char *from_url, void *src); int curly_stream(const char *from_url, unsigned long duration); int curly_stream_init(const char *ip, unsigned short port); void curly_stream_cleanup(void); diff --git a/itemq.c b/itemq.c index e00f83b..4754b39 100644 --- a/itemq.c +++ b/itemq.c @@ -6,6 +6,8 @@ #include #include #include + +#include "config.h" #include "curly.h" #include "m3u8.h" #include "log.h" @@ -183,15 +185,15 @@ void emulate_stream(void) { curr->done = 1; } -#ifdef USE_STREAM -int reload_m3u8(const char *from_file, const char *urlbase) { -#else -int reload_m3u8(MFILE *f, const char *urlbase) { -#endif -#ifdef USE_STREAM +int reload_m3u8(void *src, const char *urlbase) { + +#ifdef USE_MEMFILE + MFILE *f; +#else FILE *f; #endif + char buf[1024]; struct item *n; struct item *p; @@ -207,20 +209,19 @@ int reload_m3u8(MFILE *f, const char *urlbase) { WHOAMI; - + f = src; plist = pid = bw = 0; DPRINT("Reloading M3U8\n"); -#ifdef USE_STREAM - f = fopen(from_file, "r"); -#endif if (!f) return -1; -#ifdef USE_STREAM - while (fgets(buf, sizeof buf, f)) { -#else + +#ifdef USE_MEMFILE while (mgets(buf, sizeof buf, f)) { +#else + while (fgets(buf, sizeof buf, f)) { #endif + if (buf[strlen(buf) - 1] == '\n') buf[strlen(buf) - 1] = 0; if (buf[strlen(buf) - 1] == '\r') @@ -291,9 +292,7 @@ int reload_m3u8(MFILE *f, const char *urlbase) { } } } -#ifdef USE_STREAM - fclose(f); -#endif + return 0; } @@ -326,6 +325,7 @@ static void reset_base(char *base, char *url){ //TODO risky dice *(strrchr(base, '/')+1) = 0; } + int main(int argc, char *argv[]) { time_t last, now; @@ -359,21 +359,26 @@ int main(int argc, char *argv[]) { now = time(NULL); if (live && now-last>=refresh_period) { DPRINT("Refreshing M3U8 after %d real seconds\n",(int)(last?now-last:0)); -#ifdef USE_STREAM - refreshed = (0 == curly_refresh_m3u8(url, PLS)); -#else +#ifdef USE_MEMFILE MFILE *f = mopen(NULL, 0, "w+"); - refreshed = (0 == curly_refresh_m3u8(url, f)); + //memfile actually doesn't reposition rpos in mwrite calls + //but it should at some point so let's stay future-fool + mrewind(f); +#else + FILE *f = fopen(PLS, "w+"); + refreshed = (0 == curly_refresh_m3u8(url, f)); + rewind(f); #endif if (refreshed) { last = now = time(NULL); purge_prepare(); -#ifdef USE_STREAM - if (0 == reload_m3u8(PLS, base)) { -#else if (0 == reload_m3u8(f, base)) { + +#ifdef USE_MEMFILE mclose(f); +#else + fclose(f); #endif refreshed = 0; purge_run(0); diff --git a/m3u8.c b/m3u8.c index 5321969..2a196e5 100644 --- a/m3u8.c +++ b/m3u8.c @@ -11,6 +11,7 @@ #include +#include "config.h" #include "m3u8.h" #include "log.h" diff --git a/memfile.c b/memfile.c index 5cb5055..1b998ff 100644 --- a/memfile.c +++ b/memfile.c @@ -2,6 +2,7 @@ #include #include +#include "config.h" #include "memfile.h" #include "log.h" @@ -121,6 +122,10 @@ no_mem: return tot; } +void mrewind(MFILE *m){ + m->rpos = 0; +} + void mdump(MFILE *m){ WHOAMI; write(1, m->pm, m->length); diff --git a/memfile.h b/memfile.h index 28bdfb1..2290204 100644 --- a/memfile.h +++ b/memfile.h @@ -17,6 +17,9 @@ int mputc(int c, MFILE *mf); size_t mread(void *ptr, size_t size, size_t nmemb, MFILE *mf); size_t mwrite(const void *ptr, size_t size, size_t nmemb, MFILE *mf); +void mrewind(MFILE *m); + void mdump(MFILE *m); + #endif /* MEMFILE_H_ */