1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

support dvr. change to 0.9.69

This commit is contained in:
winlin 2014-04-17 16:06:49 +08:00
parent 996d042a33
commit 73459547e1
13 changed files with 600 additions and 21 deletions

View file

@ -33,14 +33,77 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class SrsSource;
class SrsRequest;
class SrsAmf0Object;
class SrsStream;
class SrsOnMetaDataPacket;
class SrsSharedPtrMessage;
/**
* file stream to read/write file.
*/
class SrsFileStream
{
private:
std::string _file;
int fd;
public:
SrsFileStream();
virtual ~SrsFileStream();
public:
virtual int open(std::string file);
virtual int close();
public:
/**
* @param pnread, return the read size. NULL to ignore.
*/
virtual int read(void* buf, size_t count, ssize_t* pnread);
/**
* @param pnwrite, return the write size. NULL to ignore.
*/
virtual int write(void* buf, size_t count, ssize_t* pnwrite);
public:
/**
* get size of file.
*/
virtual int64_t size();
/**
* wrapper for system lseek where whence always use SEEK_SET
*/
virtual off_t lseek(off_t offset);
};
/**
* encode data to flv file.
*/
class SrsFlvEncoder
{
private:
SrsFileStream* _fs;
private:
bool has_audio;
bool has_video;
SrsStream* tag_stream;
public:
SrsFlvEncoder();
virtual ~SrsFlvEncoder();
public:
virtual int initialize(SrsFileStream* fs);
public:
/**
* write flv header.
* user can invoke this method multiple times,
* for example, when get audio/video sequence header.
*
* write following:
* 1. E.2 The FLV header
* 2. PreviousTagSize0 UI32 Always 0
* that is, 9+4=13bytes.
*/
virtual int write_header();
virtual int write_metadata(char* data, int size);
virtual int write_audio(int32_t timestamp, char* data, int size);
virtual int write_video(int32_t timestamp, char* data, int size);
private:
virtual int write_tag(char* header, int header_size, char* data, int size);
};
/**
@ -51,6 +114,10 @@ class SrsDvr
{
private:
SrsSource* _source;
private:
bool dvr_enabled;
SrsFileStream* fs;
SrsFlvEncoder* enc;
public:
SrsDvr(SrsSource* source);
virtual ~SrsDvr();
@ -68,7 +135,7 @@ public:
/**
* get some information from metadata, it's optinal.
*/
virtual int on_meta_data(SrsAmf0Object* metadata);
virtual int on_meta_data(SrsOnMetaDataPacket* metadata);
/**
* mux the audio packets to dvr.
*/