Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-12-04 11:27:07 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
2cb8b7dd5286792f293a488e9588561b6d30f98b
2cb8b7dd
1 parent
315f9818
for bug #248, use simple buffer for hls.
显示空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
100 行增加
和
23 行删除
trunk/src/app/srs_app_hls.cpp
trunk/src/app/srs_app_hls.hpp
trunk/src/app/srs_app_hls.cpp
查看文件 @
2cb8b7d
...
...
@@ -198,7 +198,7 @@ public:
return
ret
;
}
static
int
write_frame
(
SrsFileWriter
*
writer
,
SrsMpegtsFrame
*
frame
,
SrsBuffer
*
buffer
)
static
int
write_frame
(
SrsFileWriter
*
writer
,
SrsMpegtsFrame
*
frame
,
Srs
Simple
Buffer
*
buffer
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -396,6 +396,56 @@ private:
}
};
SrsSimpleBuffer
::
SrsSimpleBuffer
()
{
}
SrsSimpleBuffer
::~
SrsSimpleBuffer
()
{
}
int
SrsSimpleBuffer
::
length
()
{
int
len
=
(
int
)
data
.
size
();
srs_assert
(
len
>=
0
);
return
len
;
}
char
*
SrsSimpleBuffer
::
bytes
()
{
return
(
length
()
==
0
)
?
NULL
:
&
data
.
at
(
0
);
}
void
SrsSimpleBuffer
::
erase
(
int
size
)
{
if
(
size
<=
0
)
{
return
;
}
if
(
size
>=
length
())
{
data
.
clear
();
return
;
}
data
.
erase
(
data
.
begin
(),
data
.
begin
()
+
size
);
}
void
SrsSimpleBuffer
::
append
(
const
char
*
bytes
,
int
size
)
{
srs_assert
(
size
>
0
);
data
.
insert
(
data
.
end
(),
bytes
,
bytes
+
size
);
}
SrsHlsAacJitter
::
SrsHlsAacJitter
()
{
base_pts
=
0
;
nb_samples
=
0
;
// TODO: config it, 0 means no adjust
sync_ms
=
SRS_CONF_DEFAULT_AAC_SYNC
;
}
SrsHlsAacJitter
::~
SrsHlsAacJitter
()
{
}
...
...
@@ -481,7 +531,7 @@ int SrsTSMuxer::open(string _path)
return
ret
;
}
int
SrsTSMuxer
::
write_audio
(
SrsMpegtsFrame
*
af
,
SrsBuffer
*
ab
)
int
SrsTSMuxer
::
write_audio
(
SrsMpegtsFrame
*
af
,
Srs
Simple
Buffer
*
ab
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -492,7 +542,7 @@ int SrsTSMuxer::write_audio(SrsMpegtsFrame* af, SrsBuffer* ab)
return
ret
;
}
int
SrsTSMuxer
::
write_video
(
SrsMpegtsFrame
*
vf
,
SrsBuffer
*
vb
)
int
SrsTSMuxer
::
write_video
(
SrsMpegtsFrame
*
vf
,
Srs
Simple
Buffer
*
vb
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -538,15 +588,6 @@ void SrsHlsSegment::update_duration(int64_t current_frame_dts)
return
;
}
SrsHlsAacJitter
::
SrsHlsAacJitter
()
{
base_pts
=
0
;
nb_samples
=
0
;
// TODO: config it, 0 means no adjust
sync_ms
=
SRS_CONF_DEFAULT_AAC_SYNC
;
}
SrsHlsMuxer
::
SrsHlsMuxer
()
{
hls_fragment
=
hls_window
=
0
;
...
...
@@ -654,7 +695,7 @@ bool SrsHlsMuxer::is_segment_overflow()
return
current
->
duration
>=
hls_fragment
;
}
int
SrsHlsMuxer
::
flush_audio
(
SrsMpegtsFrame
*
af
,
SrsBuffer
*
ab
)
int
SrsHlsMuxer
::
flush_audio
(
SrsMpegtsFrame
*
af
,
Srs
Simple
Buffer
*
ab
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -681,7 +722,7 @@ int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab)
return
ret
;
}
int
SrsHlsMuxer
::
flush_video
(
SrsMpegtsFrame
*
/*af*/
,
Srs
Buffer
*
/*ab*/
,
SrsMpegtsFrame
*
vf
,
Srs
Buffer
*
vb
)
int
SrsHlsMuxer
::
flush_video
(
SrsMpegtsFrame
*
/*af*/
,
Srs
SimpleBuffer
*
/*ab*/
,
SrsMpegtsFrame
*
vf
,
SrsSimple
Buffer
*
vb
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -964,8 +1005,8 @@ SrsHlsCache::SrsHlsCache()
{
aac_jitter
=
new
SrsHlsAacJitter
();
ab
=
new
SrsBuffer
();
vb
=
new
SrsBuffer
();
ab
=
new
SrsSimpleBuffer
();
vb
=
new
SrsSimpleBuffer
();
af
=
new
SrsMpegtsFrame
();
vf
=
new
SrsMpegtsFrame
();
...
...
trunk/src/app/srs_app_hls.hpp
查看文件 @
2cb8b7d
...
...
@@ -50,7 +50,6 @@ extern int aac_sample_rates[];
#include <string>
#include <vector>
class
SrsBuffer
;
class
SrsSharedPtrMessage
;
class
SrsCodecSample
;
class
SrsMpegtsFrame
;
...
...
@@ -64,6 +63,43 @@ class SrsSource;
class
SrsFileWriter
;
/**
* the simple buffer use vector to append bytes,
* it's for hls, and need to be refined in future.
*/
class
SrsSimpleBuffer
{
private
:
std
::
vector
<
char
>
data
;
public
:
SrsSimpleBuffer
();
virtual
~
SrsSimpleBuffer
();
public
:
/**
* get the length of buffer. empty if zero.
* @remark assert length() is not negative.
*/
virtual
int
length
();
/**
* get the buffer bytes.
* @return the bytes, NULL if empty.
*/
virtual
char
*
bytes
();
/**
* erase size of bytes from begin.
* @param size to erase size of bytes.
* clear if size greater than or equals to length()
* @remark ignore size is not positive.
*/
virtual
void
erase
(
int
size
);
/**
* append specified bytes to buffer.
* @param size the size of bytes
* @remark assert size is positive.
*/
virtual
void
append
(
const
char
*
bytes
,
int
size
);
};
/**
* jitter correct for audio,
* the sample rate 44100/32000 will lost precise,
* when mp4/ts(tbn=90000) covert to flv/rtmp(1000),
...
...
@@ -109,8 +145,8 @@ public:
virtual
~
SrsTSMuxer
();
public
:
virtual
int
open
(
std
::
string
_path
);
virtual
int
write_audio
(
SrsMpegtsFrame
*
af
,
SrsBuffer
*
ab
);
virtual
int
write_video
(
SrsMpegtsFrame
*
vf
,
SrsBuffer
*
vb
);
virtual
int
write_audio
(
SrsMpegtsFrame
*
af
,
SrsSimpleBuffer
*
ab
);
virtual
int
write_video
(
SrsMpegtsFrame
*
vf
,
SrsSimpleBuffer
*
vb
);
virtual
void
close
();
};
...
...
@@ -196,8 +232,8 @@ public:
* that is whether the current segment duration >= the segment in config
*/
virtual
bool
is_segment_overflow
();
virtual
int
flush_audio
(
SrsMpegtsFrame
*
af
,
SrsBuffer
*
ab
);
virtual
int
flush_video
(
SrsMpegtsFrame
*
af
,
SrsBuffer
*
ab
,
SrsMpegtsFrame
*
vf
,
SrsBuffer
*
vb
);
virtual
int
flush_audio
(
SrsMpegtsFrame
*
af
,
SrsSimpleBuffer
*
ab
);
virtual
int
flush_video
(
SrsMpegtsFrame
*
af
,
SrsSimpleBuffer
*
ab
,
SrsMpegtsFrame
*
vf
,
SrsSimpleBuffer
*
vb
);
/**
* close segment(ts).
* @param log_desc the description for log.
...
...
@@ -231,9 +267,9 @@ class SrsHlsCache
private
:
// current frame and buffer
SrsMpegtsFrame
*
af
;
SrsBuffer
*
ab
;
Srs
Simple
Buffer
*
ab
;
SrsMpegtsFrame
*
vf
;
SrsBuffer
*
vb
;
Srs
Simple
Buffer
*
vb
;
private
:
// the audio cache buffer start pts, to flush audio if full.
int64_t
audio_buffer_start_pts
;
...
...
请
注册
或
登录
后发表评论