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

refine http/dvr/hls to use file reader/writer. 0.9.146

This commit is contained in:
winlin 2014-07-05 07:33:18 +08:00
parent ba2e7bbf76
commit 032118581a
14 changed files with 447 additions and 382 deletions

View file

@ -33,189 +33,11 @@ using namespace std;
#include <srs_core_autofree.hpp>
#include <srs_kernel_stream.hpp>
#include <srs_kernel_utility.hpp>
#include <srs_kernel_file.hpp>
#define SRS_FLV_TAG_HEADER_SIZE 11
#define SRS_FLV_PREVIOUS_TAG_SIZE 4
SrsFileWriter::SrsFileWriter()
{
}
SrsFileWriter::~SrsFileWriter()
{
close();
}
int SrsFileWriter::open(string file)
{
int ret = ERROR_SUCCESS;
if (fd > 0) {
ret = ERROR_SYSTEM_FILE_ALREADY_OPENED;
srs_error("file %s already opened. ret=%d", _file.c_str(), ret);
return ret;
}
int flags = O_CREAT|O_WRONLY|O_TRUNC;
mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH;
if ((fd = ::open(file.c_str(), flags, mode)) < 0) {
ret = ERROR_SYSTEM_FILE_OPENE;
srs_error("open file %s failed. ret=%d", file.c_str(), ret);
return ret;
}
_file = file;
return ret;
}
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;
if (fd > 0) {
ret = ERROR_SYSTEM_FILE_ALREADY_OPENED;
srs_error("file %s already opened. ret=%d", _file.c_str(), ret);
return ret;
}
if ((fd = ::open(file.c_str(), O_RDONLY)) < 0) {
ret = ERROR_SYSTEM_FILE_OPENE;
srs_error("open file %s failed. ret=%d", file.c_str(), ret);
return ret;
}
_file = file;
return ret;
}
void SrsFileReader::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 SrsFileReader::is_open()
{
return fd > 0;
}
int64_t SrsFileReader::tellg()
{
return (int64_t)::lseek(fd, 0, SEEK_CUR);
}
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;
ssize_t nread;
if ((nread = ::read(fd, buf, count)) < 0) {
ret = ERROR_SYSTEM_FILE_READ;
srs_error("read from file %s failed. ret=%d", _file.c_str(), ret);
return ret;
}
if (nread == 0) {
ret = ERROR_SYSTEM_FILE_EOF;
return ret;
}
if (pnread != NULL) {
*pnread = nread;
}
return ret;
}
SrsFlvEncoder::SrsFlvEncoder()
{
_fs = NULL;