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: 21*0ba82236SDario Casalinuovo RTSPMediaIO(BUrl ourUrl); 224c7eafb7SDario Casalinuovo virtual ~RTSPMediaIO(); 234c7eafb7SDario Casalinuovo 244c7eafb7SDario Casalinuovo status_t InitCheck() const; 254c7eafb7SDario Casalinuovo 26d004f813SDario Casalinuovo virtual ssize_t WriteAt(off_t position, 27d004f813SDario Casalinuovo const void* buffer, 284c7eafb7SDario Casalinuovo size_t size); 294c7eafb7SDario Casalinuovo 30b13f52bfSDario Casalinuovo virtual status_t SetSize(off_t size); 31b13f52bfSDario Casalinuovo 320957c821SDario Casalinuovo void LoopThread(); 330957c821SDario Casalinuovo void ShutdownLoop(); 340957c821SDario Casalinuovo private: 350957c821SDario Casalinuovo static int32 _LoopThread(void* data); 360957c821SDario Casalinuovo 37*0ba82236SDario 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 status_t fInitErr; 474c7eafb7SDario Casalinuovo }; 484c7eafb7SDario Casalinuovo 494c7eafb7SDario Casalinuovo 504c7eafb7SDario Casalinuovo class HaikuRTSPClient : public RTSPClient 514c7eafb7SDario Casalinuovo { 524c7eafb7SDario Casalinuovo public: 534c7eafb7SDario Casalinuovo HaikuRTSPClient(UsageEnvironment& env, 544c7eafb7SDario Casalinuovo char const* rtspURL, 554c7eafb7SDario Casalinuovo portNumBits tunnelOverHTTPPortNum, 560957c821SDario Casalinuovo RTSPMediaIO* fInputAdapter); 570957c821SDario Casalinuovo 580957c821SDario Casalinuovo void Close(); 594c7eafb7SDario Casalinuovo 604c7eafb7SDario Casalinuovo BInputAdapter* GetInputAdapter() const; 614c7eafb7SDario Casalinuovo 624c7eafb7SDario Casalinuovo status_t WaitForInit(bigtime_t timeout); 634c7eafb7SDario Casalinuovo 644c7eafb7SDario Casalinuovo void NotifyError(); 654c7eafb7SDario Casalinuovo void NotifySucces(); 664c7eafb7SDario Casalinuovo 674c7eafb7SDario Casalinuovo protected: 680957c821SDario Casalinuovo 694c7eafb7SDario Casalinuovo virtual ~HaikuRTSPClient(); 704c7eafb7SDario Casalinuovo public: 714c7eafb7SDario Casalinuovo MediaSubsessionIterator* iter; 724c7eafb7SDario Casalinuovo MediaSession* session; 734c7eafb7SDario Casalinuovo MediaSubsession* subsession; 744c7eafb7SDario Casalinuovo TaskToken streamTimerTask; 754c7eafb7SDario Casalinuovo double duration; 764c7eafb7SDario Casalinuovo 774c7eafb7SDario Casalinuovo private: 780957c821SDario Casalinuovo RTSPMediaIO* fInterface; 790957c821SDario Casalinuovo 804c7eafb7SDario Casalinuovo port_id fInitPort; 814c7eafb7SDario Casalinuovo }; 824c7eafb7SDario Casalinuovo 834c7eafb7SDario Casalinuovo #endif 84