diff options
Diffstat (limited to 'server/recstreamer.c')
-rw-r--r-- | server/recstreamer.c | 75 |
1 files changed, 6 insertions, 69 deletions
diff --git a/server/recstreamer.c b/server/recstreamer.c index 8a5a7ad..bd01b96 100644 --- a/server/recstreamer.c +++ b/server/recstreamer.c @@ -12,14 +12,14 @@ using namespace Streamdev; // --- cStreamdevRecStreamer ------------------------------------------------- -cStreamdevRecStreamer::cStreamdevRecStreamer(cRecording *Rec, const cServerConnection *Connection, std::string pos): +cStreamdevRecStreamer::cStreamdevRecStreamer(RecPlayer *RecPlayer, const cServerConnection *Connection, int64_t StartOffset): cStreamdevStreamer("streamdev-recstreaming", Connection), - m_RecPlayer(Rec), + m_RecPlayer(RecPlayer), + m_StartOffset(StartOffset), m_From(0L) { Dprintf("New rec streamer\n"); - m_To = (int64_t) m_RecPlayer.getLengthBytes() - 1; - m_Pos = pos; + m_To = (int64_t) m_RecPlayer->getLengthBytes() - StartOffset - 1; } cStreamdevRecStreamer::~cStreamdevRecStreamer() @@ -30,7 +30,7 @@ cStreamdevRecStreamer::~cStreamdevRecStreamer() int64_t cStreamdevRecStreamer::SetRange(int64_t &From, int64_t &To) { - int64_t l = (int64_t) m_RecPlayer.getLengthBytes(); + int64_t l = (int64_t) GetLength(); if (From < 0L) { From += l; if (From < 0L) @@ -53,73 +53,10 @@ int64_t cStreamdevRecStreamer::SetRange(int64_t &From, int64_t &To) return m_To - m_From + 1; } -int32_t cStreamdevRecStreamer::getIFrameBeforeFrame(int32_t frame) -{ - uint32_t iframe, len; - uint64_t pos; - m_RecPlayer.getNextIFrame(frame + 1, 0, &pos, &iframe, &len); - Dprintf("pos: frame %i -> start at iFrame %i\n", frame, iframe); - return iframe; -} - -int64_t cStreamdevRecStreamer::GetFromByPos() -{ - if (m_Pos.empty()) return 0; - - std::string pos = m_Pos; - - // cut prefix (if any) - if (pos.find('_') != std::string::npos) { - pos = pos.substr(pos.find('_') + 1); - } - - // resume file - if (pos == "resume") { - int frame = getIFrameBeforeFrame(m_RecPlayer.frameFromResume()); - Dprintf("pos: frame from resume: %i\n", frame); - return m_RecPlayer.positionFromFrameNumber(frame); - } - - // mark - if (pos.find("mark.") == 0) { - int index = atoi(pos.substr(5).c_str()); - int frame = getIFrameBeforeFrame(m_RecPlayer.frameFromMark(index)); - Dprintf("pos: mark %i - frame %i\n", index, frame); - return m_RecPlayer.positionFromFrameNumber(frame); - } - - // time - if (pos.find("time.") == 0) { - int seconds = atoi(pos.substr(5).c_str()); - int frame = getIFrameBeforeFrame(m_RecPlayer.frameFromSeconds(seconds)); - Dprintf("pos: %i seconds - frame %i\n", seconds, frame); - return m_RecPlayer.positionFromFrameNumber(frame); - } - - // frame number - if (pos.find("frame.") == 0) { - int frame = getIFrameBeforeFrame(atoi(pos.substr(6).c_str())); - Dprintf("pos: frame %i\n", frame); - return m_RecPlayer.positionFromFrameNumber(frame); - } - - // default: byte index or percent - // as "%" is the url escape character, interpret <100 as percent - // if (pos.find("%") != std::string::npos) { - // int percent = atoi(pos.substr(0, pos.find("%")).c_str()); - int64_t number = atol(pos.c_str()); - if (number < 100) { - Dprintf("pos: %lld percent\n", (long long)number); - int64_t offset = m_RecPlayer.getLengthBytes() * number / 100; - return offset; - } - return number; -} - uchar* cStreamdevRecStreamer::GetFromReceiver(int &Count) { if (m_From <= m_To) { - Count = (int) m_RecPlayer.getBlock(m_Buffer, m_From, sizeof(m_Buffer)); + Count = (int) m_RecPlayer->getBlock(m_Buffer, m_StartOffset + m_From, sizeof(m_Buffer)); return m_Buffer; } return NULL; |