00001 #ifndef HTTPLIVESTREAM_H
00002 #define HTTPLIVESTREAM_H
00003
00004 #include <QString>
00005
00006 #include "datacontracts/liveStreamInfoList.h"
00007
00008 #include "frame.h"
00009
00010 typedef enum {
00011 kHLSStatusUndefined = -1,
00012 kHLSStatusQueued = 0,
00013 kHLSStatusStarting = 1,
00014 kHLSStatusRunning = 2,
00015 kHLSStatusCompleted = 3,
00016 kHLSStatusErrored = 4,
00017 kHLSStatusStopping = 5,
00018 kHLSStatusStopped = 6
00019 } HTTPLiveStreamStatus;
00020
00021
00022 class MTV_PUBLIC HTTPLiveStream
00023 {
00024 public:
00025 HTTPLiveStream(QString srcFile, uint16_t width = 640, uint16_t height = 480,
00026 uint32_t bitrate = 800000, uint32_t abitrate = 64000,
00027 uint16_t maxSegments = 0, uint16_t segmentSize = 10,
00028 uint32_t aobitrate = 32000, uint16_t srate = -1);
00029 HTTPLiveStream(int streamid);
00030 ~HTTPLiveStream();
00031
00032 bool InitForWrite(void);
00033 bool LoadFromDB(void);
00034
00035 int GetStreamID(void) const { return m_streamid; }
00036 uint16_t GetWidth(void) const { return m_width; }
00037 uint16_t GetHeight(void) const { return m_height; }
00038 uint32_t GetBitrate(void) const { return m_bitrate; }
00039 uint32_t GetAudioBitrate(void) const { return m_audioBitrate; }
00040 uint32_t GetAudioOnlyBitrate(void) const { return m_audioOnlyBitrate; }
00041 uint16_t GetMaxSegments(void) const { return m_maxSegments; }
00042 QString GetSourceFile(void) const { return m_sourceFile; }
00043 QString GetHTMLPageName(void) const;
00044 QString GetMetaPlaylistName(void) const;
00045 QString GetPlaylistName(bool audioOnly = false) const;
00046 uint16_t GetSegmentSize(void) const { return m_segmentSize; }
00047 QString GetFilename(uint16_t segmentNumber = 0, bool fileOnly = false,
00048 bool audioOnly = false, bool encoded = false) const;
00049 QString GetCurrentFilename(
00050 bool audioOnly = false, bool encoded = false) const;
00051
00052 void SetOutputVars(void);
00053
00054 HTTPLiveStreamStatus GetDBStatus(void) const;
00055
00056 int AddStream(void);
00057 bool AddSegment(void);
00058
00059 bool WriteHTML(void);
00060 bool WriteMetaPlaylist(void);
00061 bool WritePlaylist(bool audioOnly = false, bool writeEndTag = false);
00062
00063 bool SaveSegmentInfo(void);
00064
00065 bool UpdateSizeInfo(uint16_t width, uint16_t height,
00066 uint16_t srcwidth, uint16_t srcheight);
00067 bool UpdateStatus(HTTPLiveStreamStatus status);
00068 bool UpdateStatusMessage(QString message);
00069 bool UpdatePercentComplete(int percent);
00070
00071 QString StatusToString(HTTPLiveStreamStatus status);
00072
00073 bool CheckStop(void);
00074
00075 DTC::LiveStreamInfo *StartStream(void);
00076 static DTC::LiveStreamInfo *StopStream(int id);
00077 static bool RemoveStream(int id);
00078
00079 DTC::LiveStreamInfo *GetLiveStreamInfo(DTC::LiveStreamInfo *info = NULL);
00080 static DTC::LiveStreamInfoList *GetLiveStreamInfoList( const QString &FileName = "");
00081
00082 protected:
00083 bool m_writing;
00084 int m_streamid;
00085 QString m_sourceFile;
00086 QString m_sourceHost;
00087 uint16_t m_sourceWidth;
00088 uint16_t m_sourceHeight;
00089 QString m_outDir;
00090 QString m_outBase;
00091 QString m_outBaseEncoded;
00092 QString m_outFile;
00093 QString m_outFileEncoded;
00094 QString m_audioOutFile;
00095 QString m_audioOutFileEncoded;
00096 uint16_t m_segmentSize;
00097 uint16_t m_segmentFrames;
00098 uint16_t m_maxSegments;
00099 uint16_t m_segmentCount;
00100 uint16_t m_startSegment;
00101 uint16_t m_curSegment;
00102 QString m_httpPrefix;
00103 QString m_httpPrefixRel;
00104 uint16_t m_height;
00105 uint16_t m_width;
00106 uint32_t m_bitrate;
00107 uint32_t m_audioBitrate;
00108 uint32_t m_audioOnlyBitrate;
00109 uint16_t m_sampleRate;
00110
00111 QDateTime m_created;
00112 QDateTime m_lastModified;
00113 uint16_t m_percentComplete;
00114 QString m_relativeURL;
00115 QString m_fullURL;
00116 QString m_statusMessage;
00117
00118 HTTPLiveStreamStatus m_status;
00119 };
00120
00121 #endif
00122
00123
00124