00001 00007 #ifndef _IPTV_MEDIASINK_H_ 00008 #define _IPTV_MEDIASINK_H_ 00009 00010 #include <vector> 00011 using namespace std; 00012 00013 #include <QMutex> 00014 00015 #include <MediaSink.hh> 00016 00017 class TSDataListener; 00018 00019 // ============================================================================ 00020 // IPTVMediaSink : Helper class use to receive RTSP data from socket. 00021 // ============================================================================ 00022 class IPTVMediaSink : public MediaSink 00023 { 00024 public: 00025 static IPTVMediaSink *CreateNew(UsageEnvironment &env, 00026 unsigned bufferSize); 00027 00028 void AddListener(TSDataListener*); 00029 void RemoveListener(TSDataListener*); 00030 00031 protected: 00032 IPTVMediaSink(UsageEnvironment &env, 00033 unsigned int bufferSize); 00034 virtual ~IPTVMediaSink(); 00035 00036 virtual void afterGettingFrame1(unsigned frameSize, 00037 struct timeval presentationTime); 00038 00039 static void afterGettingFrame(void *clientData, 00040 unsigned int frameSize, 00041 unsigned int numTruncatedBytes, 00042 struct timeval presentationTime, 00043 unsigned int durationInMicroseconds); 00044 00045 private: 00046 virtual Boolean continuePlaying(void); 00047 00048 private: 00049 unsigned char *_buf; 00050 unsigned int _buf_size; 00051 UsageEnvironment &_env; 00052 vector<TSDataListener*> _listeners; 00053 mutable QMutex _lock; 00054 00055 private: 00056 // avoid default contructors & operator= 00057 IPTVMediaSink(); 00058 IPTVMediaSink(const IPTVMediaSink&); 00059 IPTVMediaSink &operator=(const IPTVMediaSink&); 00060 }; 00061 00062 #endif // _IPTV_MEDIASINK_H_ 00063 00064 /* vim: set expandtab tabstop=4 shiftwidth=4: */
1.6.3