Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
xiaofang li
ZLMediaKit
Commits
fde6b436
Commit
fde6b436
authored
3 years ago
by
baiyfcu
Browse files
Options
Download
Email Patches
Plain Diff
封装rtp server创建和关闭
parent
90305475
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
api/tests/h264_media_server.c
+1
-0
api/tests/h264_media_server.c
server/WebApi.cpp
+37
-22
server/WebApi.cpp
server/WebApi.h
+3
-0
server/WebApi.h
with
41 additions
and
22 deletions
+41
-22
api/tests/h264_media_server.c
+
1
-
0
View file @
fde6b436
...
...
@@ -10,6 +10,7 @@
#include
<signal.h>
#include
<string.h>
#include
<stdio.h>
#ifdef _WIN32
#include
"windows.h"
#else
...
...
This diff is collapsed.
Click to expand it.
server/WebApi.cpp
+
37
-
22
View file @
fde6b436
...
...
@@ -368,6 +368,38 @@ Value makeMediaSourceJson(MediaSource &media){
return
item
;
}
uint16_t
openRtpServer
(
uint16_t
local_port
,
const
string
&
stream_id
,
bool
enable_tcp
,
const
string
&
local_ip
,
bool
re_use_port
,
uint32_t
ssrc
)
{
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
if
(
s_rtpServerMap
.
find
(
stream_id
)
!=
s_rtpServerMap
.
end
())
{
//为了防止RtpProcess所有权限混乱的问题,不允许重复添加相同的stream_id
return
0
;
}
RtpServer
::
Ptr
server
=
std
::
make_shared
<
RtpServer
>
();
server
->
start
(
local_port
,
stream_id
,
enable_tcp
,
local_ip
.
c_str
(),
re_use_port
,
ssrc
);
server
->
setOnDetach
([
stream_id
]()
{
//设置rtp超时移除事件
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
s_rtpServerMap
.
erase
(
stream_id
);
});
//保存对象
s_rtpServerMap
.
emplace
(
stream_id
,
server
);
//回复json
return
server
->
getPort
();
}
bool
closeRtpServer
(
const
string
&
stream_id
)
{
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
auto
it
=
s_rtpServerMap
.
find
(
stream_id
);
if
(
it
==
s_rtpServerMap
.
end
())
{
return
false
;
}
auto
server
=
it
->
second
;
s_rtpServerMap
.
erase
(
it
);
return
true
;
}
void
getStatisticJson
(
const
function
<
void
(
Value
&
val
)
>
&
cb
)
{
auto
obj
=
std
::
make_shared
<
Value
>
(
objectValue
);
auto
&
val
=
*
obj
;
...
...
@@ -1056,40 +1088,23 @@ void installWebApi() {
CHECK_SECRET
();
CHECK_ARGS
(
"port"
,
"enable_tcp"
,
"stream_id"
);
auto
stream_id
=
allArgs
[
"stream_id"
];
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
if
(
s_rtpServerMap
.
find
(
stream_id
)
!=
s_rtpServerMap
.
end
())
{
//为了防止RtpProcess所有权限混乱的问题,不允许重复添加相同的stream_id
auto
port
=
openRtpServer
(
allArgs
[
"port"
],
stream_id
,
allArgs
[
"enable_tcp"
].
as
<
bool
>
(),
"::"
,
allArgs
[
"re_use_port"
].
as
<
bool
>
(),
allArgs
[
"ssrc"
].
as
<
uint32_t
>
());
if
(
port
==
0
)
{
throw
InvalidArgsException
(
"该stream_id已存在"
);
}
RtpServer
::
Ptr
server
=
std
::
make_shared
<
RtpServer
>
();
server
->
start
(
allArgs
[
"port"
],
stream_id
,
allArgs
[
"enable_tcp"
].
as
<
bool
>
(),
"::"
,
allArgs
[
"re_use_port"
].
as
<
bool
>
(),
allArgs
[
"ssrc"
].
as
<
uint32_t
>
());
server
->
setOnDetach
([
stream_id
]()
{
//设置rtp超时移除事件
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
s_rtpServerMap
.
erase
(
stream_id
);
});
//保存对象
s_rtpServerMap
.
emplace
(
stream_id
,
server
);
//回复json
val
[
"port"
]
=
server
->
getP
ort
()
;
val
[
"port"
]
=
p
ort
;
});
api_regist
(
"/index/api/closeRtpServer"
,[](
API_ARGS_MAP
){
CHECK_SECRET
();
CHECK_ARGS
(
"stream_id"
);
lock_guard
<
recursive_mutex
>
lck
(
s_rtpServerMapMtx
);
auto
it
=
s_rtpServerMap
.
find
(
allArgs
[
"stream_id"
]);
if
(
it
==
s_rtpServerMap
.
end
()){
if
(
!
closeRtpServer
(
allArgs
[
"stream_id"
])){
val
[
"hit"
]
=
0
;
return
;
}
auto
server
=
it
->
second
;
s_rtpServerMap
.
erase
(
it
);
val
[
"hit"
]
=
1
;
});
...
...
This diff is collapsed.
Click to expand it.
server/WebApi.h
+
3
-
0
View file @
fde6b436
...
...
@@ -230,6 +230,9 @@ bool checkArgs(Args &args, const First &first, const KeyTypes &...keys) {
void
installWebApi
();
void
unInstallWebApi
();
uint16_t
openRtpServer
(
uint16_t
local_port
,
const
std
::
string
&
stream_id
,
bool
enable_tcp
,
const
std
::
string
&
local_ip
,
bool
re_use_port
,
uint32_t
ssrc
);
bool
closeRtpServer
(
const
std
::
string
&
stream_id
);
Json
::
Value
makeMediaSourceJson
(
mediakit
::
MediaSource
&
media
);
void
getStatisticJson
(
const
std
::
function
<
void
(
Json
::
Value
&
val
)
>
&
cb
);
void
addStreamProxy
(
const
std
::
string
&
vhost
,
const
std
::
string
&
app
,
const
std
::
string
&
stream
,
const
std
::
string
&
url
,
int
retry_count
,
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help