PushPublishRTMP with onMetadata

In my module I create streams dynamically using Stream.createInstance and use stream.play(…) to play video on them. These streams should be republished using RTMP so I create an instance of PushPublishRTMP and set source and destination. As long as I disable sendOnMetadata it works, the video played on the stream is published.

I would like to inject the metadata dynamically as well (as @setDataFrame) but I cannot figure out how to do this. I saw other posts referencing stream.sendDirect(“onMetadata”, …) but it doesn’t send it and the streaming doesn’t start (waiting for the metadata I assume). I tried calling sendData when creating the stream, when creating the push publisher, adding a listener and sending it from onStreamOnStatus and onStreamCreate, neither which worked.

The log contains:

2015-09-26      15:18:26        CEST    comment server  INFO    200     -       PushPublishRTMP.connect[rtmp://example.net:1935/app/dst]      -       -       -       40.479  -       -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -
2015-09-26      15:18:26        CEST    comment server  INFO    200     -       PushPublishRTMP#IdleHandler.create[rtmp://example.net:1935/app/dst]   -       -       -       40.487  -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -
2015-09-26      15:18:26        CEST    comment server  INFO    200     -       ExampleModule: onPushPublisherSessionCreate   -     --       40.489  -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -       -
2015-09-26      15:18:26        CEST    comment server  INFO    200     -       ExampleModule: onConnectStart -       -       -     40.49    -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:26        CEST    comment server  INFO    200     -       PushPublishRTMP.addSession[rtmp://example.net:1935/app/dst]: {[0]: 1367593 }  -       -       -       40.522  -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -
2015-09-26      15:18:26        CEST    comment server  INFO    200     -       ExampleModule: onSessionOpened        -       -     -40.529  -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP.callConnect[rtmp://example.net:1935/app/dst]: app/
{Obj[]: app: "app/", flashVer: "FMLE/3.0 (compatible; FMSc/1.0)", swfUrl: "WowzaProLiveRepeater", tcUrl: "rtmp://example.net:1935/app/", fpad: false, audioCodecs: 3191.0, videoCodecs: 252.0, pageUrl: "", sendChunkSize: 4096.0}      -       -     -40.929  -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP#ConnectResult.onResult[rtmp://example.net:1935/app/dst]: result: NetConnection.Connect.Success description:Connection accepted. Message:     -       -       -       41.168  -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP#FCPublishResult.onCallback[rtmp://example.net:1935/app/dst]: result: NetStream.Publish.Start  -       -     -41.383  -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       ExampleModule: onStreamCreate -       -       -     41.384   -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP#StreamCreateResult.onResult[rtmp://example.net:1935/app/dst]: publishStream: com.wowza.wms.stream.MediaStreamVODTest@e6dbf8  -       -       -       41.385  -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       ExampleModule: onStreamOnStatus       -       -     -41.669  -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       ExampleModule: onMetadata injected    -       -     -41.67   -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP#StreamOnStatus.onCallback[rtmp://example.net:1935/app/dst]: NetStream.Publish.Start   -       -       -     41.671   -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -       -       -       -       -       -       -       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP[rtmp://example.net:1935/app/dst].isOnMetadataReady: count:0 time:0 video:true/false videoRate:false/false audio:true/false audioRate:false/false ready:false/false   -       -       -       41.671  -       -       -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -
2015-09-26      15:18:27        CEST    comment server  INFO    200     -       PushPublishRTMP[rtmp://example.net:1935/app/dst].isOnMetadataReady: count:1 time:135 video:true/false videoRate:false/false audio:true/false audioRate:false/false ready:false/false -       -       -       41.806  -       -       -       -       -     --       -       -       -       -       -       -       -       -       -       -       -       -       -       -       -     --       -
...
(last message is repeated until it gives up)

Part of the code:

publisher.setAppInstance(appInstance);
publisher.setSrcStreamName(streamName());
publisher.setHostname("example.net");
publisher.setPort(1935);
publisher.setDstApplicationName("app");
publisher.setDstStreamName("dst");
publisher.setDstAppInstanceName("");
publisher.setSendFCPublish(true);
publisher.setSendOnMetadata(true);
publisher.setOnMetadataToSetDataFrame(true);
publisher.setDebugLog(true);
publisher.setImplementation("rtmp");
/* ... */
IMediaStream stream = appInstance.getStreams().getStream(streamName());
if (stream != null) {
	AMFDataObj amfData = new AMFDataObj();
	amfData.put("title", new AMFDataItem("Example stream"));
	amfData.put("language", new AMFDataItem("Swedish"));
	//stream.sendDirect("onMetaData", amfData);
	stream.sendDirect("onMetadata", amfData);
	logger.info("onMetadata injected");
}

Any ideas what I’m doing wrong?

Try adding

stream.processSendDirectMessages();

after your sendDirect() call. That works for me with “onTextData” events