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
2013-11-26 11:48:18 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
749b7bdb2af7c6882df893e75f628761c92a047c
749b7bdb
1 parent
326713fb
refine hls, support time jitter detect and correct
显示空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
48 行增加
和
34 行删除
trunk/src/core/srs_core_error.hpp
trunk/src/core/srs_core_hls.cpp
trunk/src/core/srs_core_hls.hpp
trunk/src/core/srs_core_source.cpp
trunk/src/core/srs_core_source.hpp
trunk/src/core/srs_core_error.hpp
查看文件 @
749b7bd
...
...
@@ -109,7 +109,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define ERROR_HLS_METADATA 600
#define ERROR_HLS_DECODE_ERROR 601
#define ERROR_HLS_BUSY 602
//
#define ERROR_HLS_BUSY 602
#define ERROR_HLS_OPEN_FAILED 603
#define ERROR_HLS_WRITE_FAILED 604
#define ERROR_HLS_AAC_FRAME_LENGTH 605
...
...
trunk/src/core/srs_core_hls.cpp
查看文件 @
749b7bd
...
...
@@ -34,6 +34,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_core_amf0.hpp>
#include <srs_core_protocol.hpp>
#include <srs_core_config.hpp>
#include <srs_core_source.hpp>
#include <srs_core_autofree.hpp>
SrsHLS
::
SrsHLS
()
{
...
...
@@ -56,10 +58,10 @@ int SrsHLS::on_publish(std::string _vhost)
{
int
ret
=
ERROR_SUCCESS
;
// TODO: check config.
if
(
muxer
)
{
ret
=
ERROR_HLS_BUSY
;
srs_error
(
"hls is busy, something error, "
"vhost=%s, ret=%d"
,
_vhost
.
c_str
(),
ret
);
hls_enabled
=
true
;
srs_trace
(
"hls is reopen, continue streaming HLS, vhost=%s"
,
_vhost
.
c_str
());
return
ret
;
}
...
...
@@ -96,8 +98,8 @@ int SrsHLS::on_publish(std::string _vhost)
void
SrsHLS
::
on_unpublish
()
{
hls_enabled
=
false
;
muxer
->
close
();
srs_freep
(
muxer
);
//muxer->close();
//srs_freep(muxer);
}
int
SrsHLS
::
on_meta_data
(
SrsOnMetaDataPacket
*
metadata
)
...
...
@@ -152,10 +154,12 @@ int SrsHLS::on_meta_data(SrsOnMetaDataPacket* metadata)
return
ret
;
}
int
SrsHLS
::
on_audio
(
Srs
Common
Message
*
audio
)
int
SrsHLS
::
on_audio
(
Srs
SharedPtr
Message
*
audio
)
{
int
ret
=
ERROR_SUCCESS
;
SrsAutoFree
(
SrsSharedPtrMessage
,
audio
,
false
);
sample
->
clear
();
if
((
ret
=
codec
->
audio_aac_demux
(
audio
->
payload
,
audio
->
size
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
...
...
@@ -175,20 +179,23 @@ int SrsHLS::on_audio(SrsCommonMessage* audio)
return
ret
;
}
u_int32_t
timestamp
=
audio
->
header
.
timestamp
;
// TODO: correct the timestamp.
if
((
ret
=
jitter
->
correct
(
audio
,
0
,
0
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
if
((
ret
=
muxer
->
write_audio
(
timestamp
,
codec
,
sample
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
muxer
->
write_audio
(
audio
->
header
.
timestamp
,
codec
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
return
ret
;
}
int
SrsHLS
::
on_video
(
Srs
Common
Message
*
video
)
int
SrsHLS
::
on_video
(
Srs
SharedPtr
Message
*
video
)
{
int
ret
=
ERROR_SUCCESS
;
SrsAutoFree
(
SrsSharedPtrMessage
,
video
,
false
);
sample
->
clear
();
if
((
ret
=
codec
->
video_avc_demux
(
video
->
payload
,
video
->
size
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
...
...
@@ -208,10 +215,11 @@ int SrsHLS::on_video(SrsCommonMessage* video)
return
ret
;
}
u_int32_t
timestamp
=
video
->
header
.
timestamp
;
// TODO: correct the timestamp.
if
((
ret
=
jitter
->
correct
(
video
,
0
,
0
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
if
((
ret
=
muxer
->
write_video
(
timestamp
,
codec
,
sample
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
muxer
->
write_video
(
video
->
header
.
timestamp
,
codec
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
...
...
trunk/src/core/srs_core_hls.hpp
查看文件 @
749b7bd
...
...
@@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <string>
class
SrsOnMetaDataPacket
;
class
Srs
Common
Message
;
class
Srs
SharedPtr
Message
;
class
SrsCodecSample
;
class
SrsCodecBuffer
;
class
SrsMpegtsFrame
;
...
...
@@ -56,8 +56,8 @@ public:
virtual
int
on_publish
(
std
::
string
_vhost
);
virtual
void
on_unpublish
();
virtual
int
on_meta_data
(
SrsOnMetaDataPacket
*
metadata
);
virtual
int
on_audio
(
SrsCommonMessage
*
audio
);
virtual
int
on_video
(
SrsCommonMessage
*
video
);
virtual
int
on_audio
(
SrsSharedPtrMessage
*
audio
);
virtual
int
on_video
(
SrsSharedPtrMessage
*
video
);
};
class
SrsTSMuxer
...
...
trunk/src/core/srs_core_source.cpp
查看文件 @
749b7bd
...
...
@@ -45,10 +45,13 @@ SrsRtmpJitter::~SrsRtmpJitter()
{
}
int
SrsRtmpJitter
::
correct
(
SrsSharedPtrMessage
*
msg
,
int
audio_sample_rate
,
int
video_frame_rate
)
int
SrsRtmpJitter
::
correct
(
SrsSharedPtrMessage
*
msg
,
int
tba
,
int
tbv
)
{
int
ret
=
ERROR_SUCCESS
;
int
audio_sample_rate
=
tba
;
int
video_frame_rate
=
tbv
;
/**
* we use a very simple time jitter detect/correct algorithm:
* 1. delta: ensure the delta is positive and valid,
...
...
@@ -117,11 +120,12 @@ int SrsConsumer::get_time()
return
jitter
->
get_time
();
}
int
SrsConsumer
::
enqueue
(
SrsSharedPtrMessage
*
msg
,
int
audio_sample_rate
,
int
video_frame_rate
)
int
SrsConsumer
::
enqueue
(
SrsSharedPtrMessage
*
msg
,
int
tba
,
int
tbv
)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
jitter
->
correct
(
msg
,
audio_sample_rate
,
video_frame_rate
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
jitter
->
correct
(
msg
,
tba
,
tbv
))
!=
ERROR_SUCCESS
)
{
srs_freep
(
msg
);
return
ret
;
}
...
...
@@ -351,11 +355,6 @@ int SrsSource::on_audio(SrsCommonMessage* audio)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
hls
->
on_audio
(
audio
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hls process audio message failed. ret=%d"
,
ret
);
return
ret
;
}
SrsSharedPtrMessage
*
msg
=
new
SrsSharedPtrMessage
();
SrsAutoFree
(
SrsSharedPtrMessage
,
msg
,
false
);
if
((
ret
=
msg
->
initialize
(
audio
,
(
char
*
)
audio
->
payload
,
audio
->
size
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -364,6 +363,11 @@ int SrsSource::on_audio(SrsCommonMessage* audio)
}
srs_verbose
(
"initialize shared ptr audio success."
);
if
((
ret
=
hls
->
on_audio
(
msg
->
copy
()))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hls process audio message failed. ret=%d"
,
ret
);
return
ret
;
}
// detach the original audio
audio
->
payload
=
NULL
;
audio
->
size
=
0
;
...
...
@@ -401,11 +405,6 @@ int SrsSource::on_video(SrsCommonMessage* video)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
hls
->
on_video
(
video
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hls process video message failed. ret=%d"
,
ret
);
return
ret
;
}
SrsSharedPtrMessage
*
msg
=
new
SrsSharedPtrMessage
();
SrsAutoFree
(
SrsSharedPtrMessage
,
msg
,
false
);
if
((
ret
=
msg
->
initialize
(
video
,
(
char
*
)
video
->
payload
,
video
->
size
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -414,6 +413,11 @@ int SrsSource::on_video(SrsCommonMessage* video)
}
srs_verbose
(
"initialize shared ptr video success."
);
if
((
ret
=
hls
->
on_video
(
msg
->
copy
()))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hls process video message failed. ret=%d"
,
ret
);
return
ret
;
}
// detach the original audio
video
->
payload
=
NULL
;
video
->
size
=
0
;
...
...
trunk/src/core/srs_core_source.hpp
查看文件 @
749b7bd
...
...
@@ -56,7 +56,7 @@ public:
/**
* detect the time jitter and correct it.
*/
virtual
int
correct
(
SrsSharedPtrMessage
*
msg
,
int
audio_sample_rate
,
int
video_frame_rate
);
virtual
int
correct
(
SrsSharedPtrMessage
*
msg
,
int
tba
,
int
tbv
);
/**
* get current client time, the last packet time.
*/
...
...
@@ -83,10 +83,12 @@ public:
virtual
int
get_time
();
/**
* enqueue an shared ptr message.
* @param audio_sample_rate used to calc the audio time delta if time-jitter detected.
* @param video_frame_rate used to calc the video time delta if time-jitter detected.
* @param tba timebase of audio.
* used to calc the audio time delta if time-jitter detected.
* @param tbv timebase of video.
* used to calc the video time delta if time-jitter detected.
*/
virtual
int
enqueue
(
SrsSharedPtrMessage
*
msg
,
int
audio_sample_rate
,
int
video_frame_rate
);
virtual
int
enqueue
(
SrsSharedPtrMessage
*
msg
,
int
tba
,
int
tbv
);
/**
* get packets in consumer queue.
* @pmsgs SrsMessages*[], output the prt array.
...
...
请
注册
或
登录
后发表评论