Added RTMP_PUSH_REWRITE trigger.
This commit is contained in:
parent
9e1f0fcb7d
commit
233b31ddee
2 changed files with 27 additions and 0 deletions
|
@ -3568,6 +3568,7 @@ var UI = {
|
||||||
['STREAM_PUSH', 'STREAM_PUSH: right before an incoming push is accepted'],
|
['STREAM_PUSH', 'STREAM_PUSH: right before an incoming push is accepted'],
|
||||||
['STREAM_TRACK_ADD', 'STREAM_TRACK_ADD: right before a track will be added to a stream; e.g.: additional push received'],
|
['STREAM_TRACK_ADD', 'STREAM_TRACK_ADD: right before a track will be added to a stream; e.g.: additional push received'],
|
||||||
['STREAM_TRACK_REMOVE', 'STREAM_TRACK_REMOVE: right before a track will be removed track from a stream; e.g.: push timeout'],
|
['STREAM_TRACK_REMOVE', 'STREAM_TRACK_REMOVE: right before a track will be removed track from a stream; e.g.: push timeout'],
|
||||||
|
['RTMP_PUSH_REWRITE', 'RTMP_PUSH_REWRITE: allows rewriting of RTMP push URLs from external to internal representation before further parsing'],
|
||||||
['CONN_OPEN', 'CONN_OPEN: right after a new incoming connection has been received'],
|
['CONN_OPEN', 'CONN_OPEN: right after a new incoming connection has been received'],
|
||||||
['CONN_CLOSE', 'CONN_CLOSE: right after a connection has been closed'],
|
['CONN_CLOSE', 'CONN_CLOSE: right after a connection has been closed'],
|
||||||
['CONN_PLAY', 'CONN_PLAY: right before a stream playback of a connection']
|
['CONN_PLAY', 'CONN_PLAY: right before a stream playback of a connection']
|
||||||
|
@ -3581,6 +3582,7 @@ var UI = {
|
||||||
case 'SYSTEM_CONFIG':
|
case 'SYSTEM_CONFIG':
|
||||||
case 'OUTPUT_START':
|
case 'OUTPUT_START':
|
||||||
case 'OUTPUT_STOP':
|
case 'OUTPUT_STOP':
|
||||||
|
case 'RTMP_PUSH_REWRITE':
|
||||||
$('[name=appliesto]').setval([]).closest('.UIelement').hide();
|
$('[name=appliesto]').setval([]).closest('.UIelement').hide();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -334,6 +334,13 @@ namespace Mist {
|
||||||
/// output handler name
|
/// output handler name
|
||||||
/// request URL (if any)
|
/// request URL (if any)
|
||||||
/// ~~~~~~~~~~~~~~~
|
/// ~~~~~~~~~~~~~~~
|
||||||
|
/// The `"RTMP_PUSH_REWRITE"` trigger is global and ran right before an RTMP publish request is parsed. It cannot be cancelled, but an invalid URL can be returned; which is effectively equivalent to cancelling.
|
||||||
|
/// This trigger is special: the response is used as RTMP URL override, and not handled as normal. If used, the handler for this trigger MUST return a valid RTMP URL to allow the push to go through. If used multiple times, the last defined handler overrides any and all previous handlers.
|
||||||
|
/// Its payload is:
|
||||||
|
/// ~~~~~~~~~~~~~~~
|
||||||
|
/// current RTMP URL
|
||||||
|
/// connected client host
|
||||||
|
/// ~~~~~~~~~~~~~~~
|
||||||
void OutRTMP::parseAMFCommand(AMF::Object & amfData, int messageType, int streamId) {
|
void OutRTMP::parseAMFCommand(AMF::Object & amfData, int messageType, int streamId) {
|
||||||
#if DEBUG >= 5
|
#if DEBUG >= 5
|
||||||
fprintf(stderr, "Received command: %s\n", amfData.Print().c_str());
|
fprintf(stderr, "Received command: %s\n", amfData.Print().c_str());
|
||||||
|
@ -479,6 +486,24 @@ namespace Mist {
|
||||||
streamName = amfData.getContentP(3)->StrValue();
|
streamName = amfData.getContentP(3)->StrValue();
|
||||||
reqUrl += "/"+streamName;//LTS
|
reqUrl += "/"+streamName;//LTS
|
||||||
|
|
||||||
|
/*LTS-START*/
|
||||||
|
if(Triggers::shouldTrigger("RTMP_PUSH_REWRITE")){
|
||||||
|
std::string payload = reqUrl+"\n" + myConn.getHost();
|
||||||
|
std::string newUrl = "";
|
||||||
|
Triggers::doTrigger("RTMP_PUSH_REWRITE", payload, "", false, newUrl);
|
||||||
|
if (!newUrl.size()){
|
||||||
|
FAIL_MSG("Push from %s to URL %s rejected - RTMP_PUSH_REWRITE trigger blanked the URL", myConn.getHost().c_str(), reqUrl.c_str());
|
||||||
|
myConn.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
reqUrl = newUrl;
|
||||||
|
size_t lSlash = newUrl.rfind('/');
|
||||||
|
if (lSlash != std::string::npos){
|
||||||
|
streamName = newUrl.substr(lSlash+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*LTS-END*/
|
||||||
|
|
||||||
if (streamName.find('/')){
|
if (streamName.find('/')){
|
||||||
streamName = streamName.substr(0, streamName.find('/'));
|
streamName = streamName.substr(0, streamName.find('/'));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue