mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
refine the file stream, to file reader and writer. 0.9.142
This commit is contained in:
parent
ed3f9f0a40
commit
1a7735182f
13 changed files with 167 additions and 121 deletions
|
@ -37,17 +37,16 @@ using namespace std;
|
|||
#define SRS_FLV_TAG_HEADER_SIZE 11
|
||||
#define SRS_FLV_PREVIOUS_TAG_SIZE 4
|
||||
|
||||
SrsFileStream::SrsFileStream()
|
||||
SrsFileWriter::SrsFileWriter()
|
||||
{
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
SrsFileStream::~SrsFileStream()
|
||||
SrsFileWriter::~SrsFileWriter()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
int SrsFileStream::open_write(string file)
|
||||
int SrsFileWriter::open(string file)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -71,7 +70,63 @@ int SrsFileStream::open_write(string file)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsFileStream::open_read(string file)
|
||||
void SrsFileWriter::close()
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
if (fd < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (::close(fd) < 0) {
|
||||
ret = ERROR_SYSTEM_FILE_CLOSE;
|
||||
srs_error("close file %s failed. ret=%d", _file.c_str(), ret);
|
||||
return;
|
||||
}
|
||||
fd = -1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool SrsFileWriter::is_open()
|
||||
{
|
||||
return fd > 0;
|
||||
}
|
||||
|
||||
int64_t SrsFileWriter::tellg()
|
||||
{
|
||||
return (int64_t)::lseek(fd, 0, SEEK_CUR);
|
||||
}
|
||||
|
||||
int SrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
ssize_t nwrite;
|
||||
if ((nwrite = ::write(fd, buf, count)) < 0) {
|
||||
ret = ERROR_SYSTEM_FILE_WRITE;
|
||||
srs_error("write to file %s failed. ret=%d", _file.c_str(), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pnwrite != NULL) {
|
||||
*pnwrite = nwrite;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
SrsFileReader::SrsFileReader()
|
||||
{
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
SrsFileReader::~SrsFileReader()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
int SrsFileReader::open(string file)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -92,7 +147,7 @@ int SrsFileStream::open_read(string file)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void SrsFileStream::close()
|
||||
void SrsFileReader::close()
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -110,12 +165,30 @@ void SrsFileStream::close()
|
|||
return;
|
||||
}
|
||||
|
||||
bool SrsFileStream::is_open()
|
||||
int64_t SrsFileReader::tellg()
|
||||
{
|
||||
return fd > 0;
|
||||
return (int64_t)::lseek(fd, 0, SEEK_CUR);
|
||||
}
|
||||
|
||||
int SrsFileStream::read(void* buf, size_t count, ssize_t* pnread)
|
||||
void SrsFileReader::skip(int64_t size)
|
||||
{
|
||||
::lseek(fd, size, SEEK_CUR);
|
||||
}
|
||||
|
||||
int64_t SrsFileReader::lseek(int64_t offset)
|
||||
{
|
||||
return (int64_t)::lseek(fd, offset, SEEK_SET);
|
||||
}
|
||||
|
||||
int64_t SrsFileReader::filesize()
|
||||
{
|
||||
int64_t cur = tellg();
|
||||
int64_t size = (int64_t)::lseek(fd, 0, SEEK_END);
|
||||
::lseek(fd, cur, SEEK_SET);
|
||||
return size;
|
||||
}
|
||||
|
||||
int SrsFileReader::read(void* buf, size_t count, ssize_t* pnread)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -138,47 +211,6 @@ int SrsFileStream::read(void* buf, size_t count, ssize_t* pnread)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsFileStream::write(void* buf, size_t count, ssize_t* pnwrite)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
ssize_t nwrite;
|
||||
if ((nwrite = ::write(fd, buf, count)) < 0) {
|
||||
ret = ERROR_SYSTEM_FILE_WRITE;
|
||||
srs_error("write to file %s failed. ret=%d", _file.c_str(), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pnwrite != NULL) {
|
||||
*pnwrite = nwrite;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int64_t SrsFileStream::tellg()
|
||||
{
|
||||
return (int64_t)::lseek(fd, 0, SEEK_CUR);
|
||||
}
|
||||
|
||||
int64_t SrsFileStream::lseek(int64_t offset)
|
||||
{
|
||||
return (int64_t)::lseek(fd, offset, SEEK_SET);
|
||||
}
|
||||
|
||||
int64_t SrsFileStream::filesize()
|
||||
{
|
||||
int64_t cur = tellg();
|
||||
int64_t size = (int64_t)::lseek(fd, 0, SEEK_END);
|
||||
::lseek(fd, cur, SEEK_SET);
|
||||
return size;
|
||||
}
|
||||
|
||||
void SrsFileStream::skip(int64_t size)
|
||||
{
|
||||
::lseek(fd, size, SEEK_CUR);
|
||||
}
|
||||
|
||||
SrsFlvEncoder::SrsFlvEncoder()
|
||||
{
|
||||
_fs = NULL;
|
||||
|
@ -190,7 +222,7 @@ SrsFlvEncoder::~SrsFlvEncoder()
|
|||
srs_freep(tag_stream);
|
||||
}
|
||||
|
||||
int SrsFlvEncoder::initialize(SrsFileStream* fs)
|
||||
int SrsFlvEncoder::initialize(SrsFileWriter* fs)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -377,7 +409,7 @@ SrsFlvFastDecoder::~SrsFlvFastDecoder()
|
|||
srs_freep(tag_stream);
|
||||
}
|
||||
|
||||
int SrsFlvFastDecoder::initialize(SrsFileStream* fs)
|
||||
int SrsFlvFastDecoder::initialize(SrsFileReader* fs)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -538,7 +570,7 @@ SrsFlvDecoder::~SrsFlvDecoder()
|
|||
srs_freep(tag_stream);
|
||||
}
|
||||
|
||||
int SrsFlvDecoder::initialize(SrsFileStream* fs)
|
||||
int SrsFlvDecoder::initialize(SrsFileReader* fs)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
|
|
@ -34,37 +34,47 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
class SrsStream;
|
||||
|
||||
/**
|
||||
* file stream to read/write file.
|
||||
* file writer, to write to file.
|
||||
*/
|
||||
class SrsFileStream
|
||||
class SrsFileWriter
|
||||
{
|
||||
private:
|
||||
std::string _file;
|
||||
int fd;
|
||||
public:
|
||||
SrsFileStream();
|
||||
virtual ~SrsFileStream();
|
||||
SrsFileWriter();
|
||||
virtual ~SrsFileWriter();
|
||||
public:
|
||||
virtual int open_write(std::string file);
|
||||
virtual int open_read(std::string file);
|
||||
virtual int open(std::string file);
|
||||
virtual void close();
|
||||
virtual bool is_open();
|
||||
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);
|
||||
/**
|
||||
* tell current offset of stream.
|
||||
*/
|
||||
virtual bool is_open();
|
||||
virtual int64_t tellg();
|
||||
public:
|
||||
virtual int write(void* buf, size_t count, ssize_t* pnwrite);
|
||||
};
|
||||
|
||||
/**
|
||||
* file reader, to read from file.
|
||||
*/
|
||||
class SrsFileReader
|
||||
{
|
||||
private:
|
||||
std::string _file;
|
||||
int fd;
|
||||
public:
|
||||
SrsFileReader();
|
||||
virtual ~SrsFileReader();
|
||||
public:
|
||||
virtual int open(std::string file);
|
||||
virtual void close();
|
||||
public:
|
||||
virtual int64_t tellg();
|
||||
virtual void skip(int64_t size);
|
||||
virtual int64_t lseek(int64_t offset);
|
||||
virtual int64_t filesize();
|
||||
virtual void skip(int64_t size);
|
||||
public:
|
||||
virtual int read(void* buf, size_t count, ssize_t* pnread);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -73,7 +83,7 @@ public:
|
|||
class SrsFlvEncoder
|
||||
{
|
||||
private:
|
||||
SrsFileStream* _fs;
|
||||
SrsFileWriter* _fs;
|
||||
private:
|
||||
SrsStream* tag_stream;
|
||||
public:
|
||||
|
@ -84,7 +94,7 @@ public:
|
|||
* initialize the underlayer file stream,
|
||||
* user can initialize multiple times to encode multiple flv files.
|
||||
*/
|
||||
virtual int initialize(SrsFileStream* fs);
|
||||
virtual int initialize(SrsFileWriter* fs);
|
||||
public:
|
||||
/**
|
||||
* write flv header.
|
||||
|
@ -122,7 +132,7 @@ private:
|
|||
class SrsFlvFastDecoder
|
||||
{
|
||||
private:
|
||||
SrsFileStream* _fs;
|
||||
SrsFileReader* _fs;
|
||||
private:
|
||||
SrsStream* tag_stream;
|
||||
public:
|
||||
|
@ -133,7 +143,7 @@ public:
|
|||
* initialize the underlayer file stream,
|
||||
* user can initialize multiple times to encode multiple flv files.
|
||||
*/
|
||||
virtual int initialize(SrsFileStream* fs);
|
||||
virtual int initialize(SrsFileReader* fs);
|
||||
public:
|
||||
/**
|
||||
* read the flv header and size.
|
||||
|
@ -156,7 +166,7 @@ public:
|
|||
class SrsFlvDecoder
|
||||
{
|
||||
private:
|
||||
SrsFileStream* _fs;
|
||||
SrsFileReader* _fs;
|
||||
private:
|
||||
SrsStream* tag_stream;
|
||||
public:
|
||||
|
@ -167,7 +177,7 @@ public:
|
|||
* initialize the underlayer file stream,
|
||||
* user can initialize multiple times to decode multiple flv files.
|
||||
*/
|
||||
virtual int initialize(SrsFileStream* fs);
|
||||
virtual int initialize(SrsFileReader* fs);
|
||||
public:
|
||||
virtual int read_header(char header[9]);
|
||||
virtual int read_tag_header(char* ptype, int32_t* pdata_size, u_int32_t* ptime);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue