diff options
-rw-r--r-- | pages/recstream.ecpp | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/pages/recstream.ecpp b/pages/recstream.ecpp index 015206e..7033518 100644 --- a/pages/recstream.ecpp +++ b/pages/recstream.ecpp @@ -15,25 +15,25 @@ using namespace vdrlive; off_t RecSize(cRecording const * recording) { - cFileName recFile(recording->FileName(), false, false); - off_t recSize = 0; - for (cUnbufferedFile *recData = recFile.Open(); recData; recData = recFile.NextFile()) { - struct stat buf; - if (0 == stat(recFile.Name(), &buf)) { - recSize += buf.st_size; - // dsyslog("LIVE: size of recording part %s is %ld", recFile.Name(), buf.st_size); - } - else { - esyslog("LIVE: can't determine size of %s", recFile.Name()); - } - } - // dsyslog("LIVE: total size of %s is %ld", recording->FileName(), recSize); - return recSize; + cFileName recFile(recording->FileName(), false, false); + off_t recSize = 0; + for (cUnbufferedFile *recData = recFile.Open(); recData; recData = recFile.NextFile()) { + struct stat buf; + if (0 == stat(recFile.Name(), &buf)) { + recSize += buf.st_size; + // dsyslog("LIVE: size of recording part %s is %ld", recFile.Name(), buf.st_size); + } + else { + esyslog("LIVE: can't determine size of %s", recFile.Name()); + } + } + // dsyslog("LIVE: total size of %s is %ld", recording->FileName(), recSize); + return recSize; } </%pre> <%args> - string recid; + string recid; </%args> <%session scope="global"> bool logged_in(false); @@ -43,34 +43,35 @@ bool logged_in(false); cRecording const * recording = LiveRecordingsManager()->GetByMd5Hash(recid); if (recording) { + reply.setContentType("video/mpeg"); reply.setKeepAliveHeader(); reply.setContentLengthHeader(RecSize(recording)); - reply.setDirectMode(); + reply.setDirectMode(); - cFileName recFile(recording->FileName(), false, false); - // dsyslog("LIVE: start send video data."); - for (cUnbufferedFile *recData = recFile.Open(); recData; recData = recFile.NextFile()) { - char buffer[KILOBYTE(16)]; - ssize_t bytesRead = 0; - // dsyslog("LIVE: send file %s", recFile->Name()); - while (0 < (bytesRead = recData->Read(buffer, sizeof(buffer)))) { - // dsyslog("LIVE: copy %zd bytes", bytesRead); - reply.out().write(buffer, bytesRead); - if (!reply.out()) { - return HTTP_GONE; - } + cFileName recFile(recording->FileName(), false, false); + // dsyslog("LIVE: start send video data."); + for (cUnbufferedFile *recData = recFile.Open(); recData; recData = recFile.NextFile()) { + char buffer[KILOBYTE(16)]; + ssize_t bytesRead = 0; + // dsyslog("LIVE: send file %s", recFile->Name()); + while (0 < (bytesRead = recData->Read(buffer, sizeof(buffer)))) { + // dsyslog("LIVE: copy %zd bytes", bytesRead); + reply.out().write(buffer, bytesRead); + if (!reply.out()) { + return HTTP_GONE; + } #if TNT_WATCHDOG_SILENCE - request.touch(); // retrigger the watchdog. + request.touch(); // retrigger the watchdog. #endif - } - // dsyslog("LIVE: bytesRead = %zd", bytesRead); - if (bytesRead < 0) { - return HTTP_PARTIAL_CONTENT; - } - } - // dsyslog("LIVE: finished send video data."); - reply.out() << std::flush; - return HTTP_OK; + } + // dsyslog("LIVE: bytesRead = %zd", bytesRead); + if (bytesRead < 0) { + return HTTP_PARTIAL_CONTENT; + } + } + // dsyslog("LIVE: finished send video data."); + reply.out() << std::flush; + return HTTP_OK; } return DECLINED; </%cpp> |