14c7eafb7SDario Casalinuovo /* 24c7eafb7SDario Casalinuovo * Copyright 2016, Dario Casalinuovo. All rights reserved. 34c7eafb7SDario Casalinuovo * Distributed under the terms of the MIT License. 44c7eafb7SDario Casalinuovo */ 54c7eafb7SDario Casalinuovo #ifndef _RTSP_MEDIA_IO_H 64c7eafb7SDario Casalinuovo #define _RTSP_MEDIA_IO_H 74c7eafb7SDario Casalinuovo 84c7eafb7SDario Casalinuovo 94c7eafb7SDario Casalinuovo #include <AdapterIO.h> 104c7eafb7SDario Casalinuovo #include <Url.h> 114c7eafb7SDario Casalinuovo 124c7eafb7SDario Casalinuovo #include "rtsp.h" 134c7eafb7SDario Casalinuovo 144c7eafb7SDario Casalinuovo 150957c821SDario Casalinuovo class HaikuRTSPClient; 160957c821SDario Casalinuovo 170957c821SDario Casalinuovo 184c7eafb7SDario Casalinuovo class RTSPMediaIO : public BAdapterIO 194c7eafb7SDario Casalinuovo { 204c7eafb7SDario Casalinuovo public: 210ba82236SDario Casalinuovo RTSPMediaIO(BUrl ourUrl); 224c7eafb7SDario Casalinuovo virtual ~RTSPMediaIO(); 234c7eafb7SDario Casalinuovo 24d004f813SDario Casalinuovo virtual ssize_t WriteAt(off_t position, 25d004f813SDario Casalinuovo const void* buffer, 264c7eafb7SDario Casalinuovo size_t size); 274c7eafb7SDario Casalinuovo 28b13f52bfSDario Casalinuovo virtual status_t SetSize(off_t size); 29b13f52bfSDario Casalinuovo 30*413b6221SDario Casalinuovo virtual status_t Open(); 31*413b6221SDario Casalinuovo 320957c821SDario Casalinuovo void LoopThread(); 330957c821SDario Casalinuovo void ShutdownLoop(); 340957c821SDario Casalinuovo private: 350957c821SDario Casalinuovo static int32 _LoopThread(void* data); 360957c821SDario Casalinuovo 370ba82236SDario Casalinuovo BUrl fUrl; 380957c821SDario Casalinuovo 390957c821SDario Casalinuovo HaikuRTSPClient* fClient; 404c7eafb7SDario Casalinuovo UsageEnvironment* fEnv; 410957c821SDario Casalinuovo TaskScheduler* fScheduler; 420957c821SDario Casalinuovo 430957c821SDario Casalinuovo char fLoopWatchVariable; 440957c821SDario Casalinuovo thread_id fLoopThread; 454c7eafb7SDario Casalinuovo }; 464c7eafb7SDario Casalinuovo 474c7eafb7SDario Casalinuovo 484c7eafb7SDario Casalinuovo class HaikuRTSPClient : public RTSPClient 494c7eafb7SDario Casalinuovo { 504c7eafb7SDario Casalinuovo public: 514c7eafb7SDario Casalinuovo HaikuRTSPClient(UsageEnvironment& env, 524c7eafb7SDario Casalinuovo char const* rtspURL, 534c7eafb7SDario Casalinuovo portNumBits tunnelOverHTTPPortNum, 540957c821SDario Casalinuovo RTSPMediaIO* fInputAdapter); 550957c821SDario Casalinuovo 560957c821SDario Casalinuovo void Close(); 574c7eafb7SDario Casalinuovo 584c7eafb7SDario Casalinuovo BInputAdapter* GetInputAdapter() const; 594c7eafb7SDario Casalinuovo 604c7eafb7SDario Casalinuovo status_t WaitForInit(bigtime_t timeout); 614c7eafb7SDario Casalinuovo 624c7eafb7SDario Casalinuovo void NotifyError(); 634c7eafb7SDario Casalinuovo void NotifySucces(); 644c7eafb7SDario Casalinuovo 654c7eafb7SDario Casalinuovo protected: 660957c821SDario Casalinuovo 674c7eafb7SDario Casalinuovo virtual ~HaikuRTSPClient(); 684c7eafb7SDario Casalinuovo public: 694c7eafb7SDario Casalinuovo MediaSubsessionIterator* iter; 704c7eafb7SDario Casalinuovo MediaSession* session; 714c7eafb7SDario Casalinuovo MediaSubsession* subsession; 724c7eafb7SDario Casalinuovo TaskToken streamTimerTask; 734c7eafb7SDario Casalinuovo double duration; 744c7eafb7SDario Casalinuovo 754c7eafb7SDario Casalinuovo private: 760957c821SDario Casalinuovo RTSPMediaIO* fInterface; 770957c821SDario Casalinuovo 784c7eafb7SDario Casalinuovo port_id fInitPort; 794c7eafb7SDario Casalinuovo }; 804c7eafb7SDario Casalinuovo 814c7eafb7SDario Casalinuovo #endif 82