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-04-10 09:20:23 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e5646e3bb56d4a098d1608886b62606202d02fcc
e5646e3b
1 parent
017b96f9
refine ingester, add vhost/id info to ingester
显示空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
44 行增加
和
15 行删除
trunk/src/app/srs_app_ingest.cpp
trunk/src/app/srs_app_ingest.hpp
trunk/src/app/srs_app_ingest.cpp
查看文件 @
e5646e3
...
...
@@ -25,6 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifdef SRS_INGEST
using
namespace
std
;
#include <srs_kernel_error.hpp>
#include <srs_app_config.hpp>
#include <srs_kernel_log.hpp>
...
...
@@ -35,6 +37,18 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// ingest never sleep a long time, for we must start the stream ASAP.
#define SRS_INGESTER_SLEEP_US (int64_t)(6*100*1000LL)
SrsIngesterFFMPEG
::
SrsIngesterFFMPEG
(
SrsFFMPEG
*
_ffmpeg
,
string
_vhost
,
string
_id
)
{
ffmpeg
=
_ffmpeg
;
vhost
=
_vhost
;
id
=
_id
;
}
SrsIngesterFFMPEG
::~
SrsIngesterFFMPEG
()
{
srs_freep
(
ffmpeg
);
}
SrsIngester
::
SrsIngester
()
{
// TODO: FIXME: support reload.
...
...
@@ -59,7 +73,7 @@ int SrsIngester::start()
}
// return for error or no engine.
if
(
ffmpeg
s
.
empty
())
{
if
(
ingester
s
.
empty
())
{
return
ret
;
}
...
...
@@ -118,7 +132,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest
return
ret
;
}
ffmpegs
.
push_back
(
ffmpeg
);
SrsIngesterFFMPEG
*
ingester
=
new
SrsIngesterFFMPEG
(
ffmpeg
,
vhost
->
arg0
(),
ingest
->
arg0
());
ingesters
.
push_back
(
ingester
);
return
ret
;
}
...
...
@@ -135,7 +150,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest
return
ret
;
}
ffmpegs
.
push_back
(
ffmpeg
);
SrsIngesterFFMPEG
*
ingester
=
new
SrsIngesterFFMPEG
(
ffmpeg
,
vhost
->
arg0
(),
ingest
->
arg0
());
ingesters
.
push_back
(
ingester
);
}
return
ret
;
...
...
@@ -151,18 +167,18 @@ int SrsIngester::cycle()
{
int
ret
=
ERROR_SUCCESS
;
std
::
vector
<
SrsFFMPEG
*>::
iterator
it
;
for
(
it
=
ffmpegs
.
begin
();
it
!=
ffmpegs
.
end
();
++
it
)
{
SrsFFMPEG
*
ffmpeg
=
*
it
;
std
::
vector
<
SrsIngesterFFMPEG
*>::
iterator
it
;
for
(
it
=
ingesters
.
begin
();
it
!=
ingesters
.
end
();
++
it
)
{
SrsIngesterFFMPEG
*
ingester
=
*
it
;
// start all ffmpegs.
if
((
ret
=
ffmpeg
->
start
())
!=
ERROR_SUCCESS
)
{
if
((
ret
=
ingester
->
ffmpeg
->
start
())
!=
ERROR_SUCCESS
)
{
srs_error
(
"ingest ffmpeg start failed. ret=%d"
,
ret
);
return
ret
;
}
// check ffmpeg status.
if
((
ret
=
ffmpeg
->
cycle
())
!=
ERROR_SUCCESS
)
{
if
((
ret
=
ingester
->
ffmpeg
->
cycle
())
!=
ERROR_SUCCESS
)
{
srs_error
(
"ingest ffmpeg cycle failed. ret=%d"
,
ret
);
return
ret
;
}
...
...
@@ -181,14 +197,14 @@ void SrsIngester::on_thread_stop()
void
SrsIngester
::
clear_engines
()
{
std
::
vector
<
SrsFFMPEG
*>::
iterator
it
;
std
::
vector
<
Srs
Ingester
FFMPEG
*>::
iterator
it
;
for
(
it
=
ffmpegs
.
begin
();
it
!=
ffmpegs
.
end
();
++
it
)
{
SrsFFMPEG
*
ffmpeg
=
*
it
;
srs_freep
(
ffmpeg
);
for
(
it
=
ingesters
.
begin
();
it
!=
ingesters
.
end
();
++
it
)
{
SrsIngesterFFMPEG
*
ingester
=
*
it
;
srs_freep
(
ingester
);
}
ffmpeg
s
.
clear
();
ingester
s
.
clear
();
}
int
SrsIngester
::
parse
()
...
...
@@ -333,7 +349,7 @@ void SrsIngester::ingester()
if
(
pithy_print
->
can_print
())
{
// TODO: FIXME: show more info.
srs_trace
(
"-> time=%"
PRId64
", ingesters=%d, input=%s"
,
pithy_print
->
get_age
(),
(
int
)
ffmpeg
s
.
size
(),
input_stream_name
.
c_str
());
pithy_print
->
get_age
(),
(
int
)
ingester
s
.
size
(),
input_stream_name
.
c_str
());
}
}
...
...
trunk/src/app/srs_app_ingest.hpp
查看文件 @
e5646e3
...
...
@@ -40,6 +40,19 @@ class SrsConfDirective;
class
SrsPithyPrint
;
/**
* ingester ffmpeg object.
*/
struct
SrsIngesterFFMPEG
{
std
::
string
vhost
;
std
::
string
id
;
SrsFFMPEG
*
ffmpeg
;
SrsIngesterFFMPEG
(
SrsFFMPEG
*
_ffmpeg
,
std
::
string
_vhost
,
std
::
string
_id
);
virtual
~
SrsIngesterFFMPEG
();
};
/**
* ingest file/stream/device,
* encode with FFMPEG(optional),
* push to SRS(or any RTMP server) over RTMP.
...
...
@@ -48,7 +61,7 @@ class SrsIngester : public ISrsThreadHandler
{
private
:
std
::
string
input_stream_name
;
std
::
vector
<
Srs
FFMPEG
*>
ffmpeg
s
;
std
::
vector
<
Srs
IngesterFFMPEG
*>
ingester
s
;
private
:
SrsThread
*
pthread
;
SrsPithyPrint
*
pithy_print
;
...
...
请
注册
或
登录
后发表评论