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:
parent
996d042a33
commit
73459547e1
13 changed files with 600 additions and 21 deletions
|
@ -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.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue