Wowza Community

Push Publishing AddOn package to push stream to CDNs and service providers

Hi Raymond,

we are very glad to see you here.

Charlie, we are definitely need your help here.

As Raymond already say, we have some issues with reconnection mechanism. Actualy the PushPublisherRTMP reconnection mechanizm works well but we need to have some control over it, how to delay the first reconnection attempt after connection failure, how to delay the following attempt if the first is not succeded and so on.

Also, there will be very good if the PushPublisherRTMP reconnection mechanism will have a little bit floating reconnection delay. This will be very usefull when, say 100 channels, has disconnected at once because of some network problems and then all of them trying to reconnect simultaneously, here is the random delay will be very very useful, so each stream will have each own reconnection cycle.

Also we have some issues on the startup. I have implemented the module where all running MediaCasters automaticaly published to BG. We have setup with MPEG-TS ingest to Wowza, over 100 channels. All channels configured with StreamStartup.xml, so on the server startup all 100+ MPEG-TS channels start publishing on the WMS and my module automaticaly start publishing each MediaCaster to BG with PushPublisherRTMP.

So, we have channels up and trying to publish to BG, all 100+ channels in several seconds. And, as I understand, here is the point where the BG ingest point sometime falling into problems. Too many connection attempts in short period of time.

Raymond, please, confirm if this issue is still actual.

Charlie, please, give me some adviсe how deal with it.

I am using the same technique as for StreamNameAlias to resolve the stream name got from user to the specific stream name with authentication credentials to specify it in PushPublishRTMP.

@Decard

  1. Please, clarify are you succeded with PushPublishRTMPAuthProviderAdobe but failed trying the same with PushPublishRTMP, right?

  2. I mean to use not the StreamNameAlias module, but the same technique to resolve the user streamName to proper streamName with authentication credentials. Contact me at support-at-unicodesolutions.ru and I will try to help you with it.

  3. Some thoughts about this

PushPublisher#IdleHandler.onIdle: validate

PushPublisher#PingResult.onResult: true

PushPublisher: ping OK

you have established the connection to the HW ingest point, not succeded in publishing the stream but anyway, the connection is established and this are the connection validation pings from WMS to HW.

Once started the PushPublishRTMP will work and keep the connection with HW until you have stop it, even if the source stream is unpublished. I am using the IMediaStreamActionNotify2.onUnPublish to stop the PushPublishRTMP when the stream from FMLE stopped.

Hi,

we got a problem with Push Publisher reconnection feature.

Seems it stop working in case of the destination host getting not resolvable for some reason. In our situation it happens for a short period of time, but the reconnector just stop working.

2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher#IdleHandler.onIdle: validate      -       -       -       66236.427       -     -       -       -       -       -       -       -       - -       -       -       -       -       -       -       -       -       -       -       -       -       -       - -
2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher.resetConnection: com.wowza.wms.plugin.pushpublish.protocol.rtmp.PushPublisherRTMPSession@49293945 -       -       -       66236.426       - -       -       -       -       -       -       -       -       -       -       -       -       -       -       - -       -       -       -       -       -       -       -       -
2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher.removeSession: {} --       -       66236.427       -       -       -       -       -       -       -       -       -       -       - -       -       -       -       -       -       -       -       -       -       -       -       -       -
2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher#IdleHandler.onIdle: validate      -       -       -       66236.427       -       -       -       -       -       -       -       -       - -       -       -       -       -       -       -       -       -       -       -       -       -       -       - -
2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher#IdleHandler.create-       -       -       66236.427       -       -       -       -       -       -       -       -       -       - -       -       -       -       -       -       -       -       -       -       -       -       -       -       -
2011-01-11      14:28:30        CET     comment server  INFO    200     -       PushPublisher.sessionClosed     --       -       66236.427       -       -       -       -       -       -       -       -       -       -       --       -       -       -       -       -       -       -       -       -       -       -       -       -
2011-01-11      14:28:30        CET     comment server  ERROR   500     -       PushPublisher.Reconnector: java.nio.channels.UnresolvedAddressException -       -       -       66236.427       -       -       -       -       -       --       -       -       -       -       -       -       -       -       -       -       -       -       -       --       -       -       -

Hi,

If you just need to add some additional params to the connection URL then just use

PushPublisherRTMP::setConnectionQueryStr(String queryStr)

for example, if you need to connect to the destination server with rtmp://server:1935/application/definst?user=test&password=test

then use

pushPublisherRTMP.setConnectionQueryStr("user=test&password=test");

How can I push to few destinations simultaneously ? Can you post an example?

Hello All,

I was wondering if someone has been able to successfully push a rtmp stream to Highwinds? Would it be possible to post your onPublish function as an example?

Thank you

Austin

Sorry for the duplicate post, original stated it failed to post!

Hello All,

I was wondering if someone has been able to successfully push a rtmp stream to Highwinds? Would it be possible to post your onPublish function as an example?

Thank you

Austin

Ok, these are the results of my testing in trying the push to Highwinds:

Highwinds setup:

server:

rtmp://fli003.dc1.hwcdn.net/zzz/definst

stream name:

fli/444444-test2?encoderuser=user&encoderpassword=password

and I configured the ip address on the wowza server on the push service.

java snippet:

publisher.setHostname(“fli003.dc1.hwcdn.net”);

publisher.setPort(1935);

publisher.setDstApplicationName(“zzz”);

publisher.setDstStreamName(“fli/444444-test2?encoderuser=user&encoderpassword=password”);

wowza logs:

INFO server comment - PushPublisher.callConnect[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: zzz/definst

INFO server comment - PushPublisher#ConnectResult.connect[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: result: NetConnection.Connect.Success description:Connection succeeded.

INFO server comment - PushPublisher#StreamCreateResult.onResult[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: publishStream: com.wowza.wms.stream.MediaStreamVODTest@13e4a5a

INFO server comment - PushPublisher#StreamOnStatus.onCallback[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: NetStream.Failed

INFO server comment - PushPublisher#StreamOnStatus.onCallback[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: NetStream.InvalidArg

INFO server comment - PushPublisher#StreamOnStatus.onCallback[rtmp://fli003.dc1.hwcdn.net:1935/zzz/definst/fli/444444-test2?encoderuser=user&encoderpassword=password]: NetStream.InvalidArg

INFO server comment - PushPublisher#IdleHandler.onIdle: validate

INFO server comment - PushPublisher#PingResult.onResult: true

INFO server comment - PushPublisher: ping OK

Any help would be great.

Thanks

Austin

Thanks Deckard,

Tried the above and still the same errors.

Austin

I do have it working FMLE to Highwinds with the same stream params.

Deckard,

Are you using PushPublishRTMPAuthProviderAdobe or just placing the username and password in the stream name? Also, do you have it working today? They (Highwinds) just updated to FMS 3.5.5

Thanks

Austin

Thanks Deckard,

I finally get it working last night by removing the username and password in HW and in the streamname sent to HW. I did try everything on the page you reference but could get it to work.

My next question is, my source streams are mpeg ts and don’t publish themselves, so I use the StartStream.xml to start them and send them to HW. The issue is my streams are not always present, only about 40% of the time. Is there any issues in WMS (memory or other) with the StartStream.xml requesting (trying to publish) the streams every 10 to 15 seconds? Is there a alternative way to sense when an mpeg ts is present at the WMS?

Thanks

Austin

I’m using rtsp announcement with PushPublish and things are working well when the encoder stops streaming thus disconnects from WMS and the PushPublish stream is closed.

I would like to lower the timeout for the RTPStream from the 90 second default but I cannot find where I can change this value. This is for when the network is dropped or the encoder doesn’t disconnect the rtsp session.

From logs:

WARN server comment - RTPStream.idle[464733206:liverepeater/definst:RTSP_22005.sdp]: Close RTSP/RTP session. Session timeout: 90000

Any help would be great

Thanks

Austin

Thanks Charlie, That was the one, works great!

Hello All,

I’m trying to push publish to Edgecast to a given folder

I have FMLE push working with the following settings:

FMS URL: rtmp://fso.dca.xxxx.edgecastcdn.net:1935/20xxxx/liveStream1 //xxxx is my account number

Stream: mystream?3efgt543w

I can play the above fine

In the pushPublisher I was able to get is working without specifying the path with the following:

publisher.setHostname(“fso.dca.xxxx.edgecastcdn.net”);

publisher.setDstApplicationName(“20xxxx”);

publisher.setDstStreamName(“mystream?3efgt543w”);

I can play the above fine

But when I add in the path as in below it doesn’t work, I can’t play the stream and there are not any error on the wowza side.

publisher.setHostname(“fso.dca.xxxx.edgecastcdn.net”);

publisher.setDstApplicationName(“20xxxx/liveStream1”);

publisher.setDstStreamName(“mystream?3efgt543w”);

I tried moving the path to the stream name and that did not work either.

Has anyone used push publishing to Edgecast to a specified folder?

Thanks

Austin

Hello,

I’m having an issue with Metadata being passed through Edgecast to the Flash Player (FlowPlayer).

If I have the FlowPlayer requesting a stream from EC that is NOT present into wowza (encoder is stopped) and than I start the encoder the FlowPlayer sees the Metadata. But every other FlowPlayer client which connects to EC and decodes the stream doesn’t get the Metadata. Has anyone else seen this with Edgecast or other cdns? Shouldn’t the Metadata be made available for every client?

Thanks

Austin

Thanks Richard but no luck, same results.

There are my setting before I push to EC:

publisher.setSendFCPublish(true);

publisher.setSendReleaseStream(true);

publisher.setSendOnMetadata(true);

publisher.setSendOriginalTimecodes(false);

I’m working with Edgecast and I don’t have a stream setup 24/7 with the new values above. I’ll work on it.

On another note, I do have the pushing of custom data working. I have a timer module (based on https://www.wowza.com/docs/how-to-log-client-count-and-metadata-for-a-stream-every-10-seconds-modulelogviewercounts) in wowza which sends custom data through the EC by adding the following:

AMFDataMixedArray myData = new AMFDataMixedArray();
myData.put("delay", 4000);//ms
myData.put("timecodeAbs", new Date().getTime());
myData.put("timecodeDataRel", stream.getDataTC());
stream.sendDirect("onMyData", myData);

And I can recover it with the Flash Player. [Complete with some insight from cricel472, Thanks]

Hey guys,

I’m the guy at BitGravity leading the live streaming engineering team, so I thought I’d clarify what’s going on.

We have done some limited in-house testing with the PushPublish module, and have 3 customers currently testing with it, two of whom are on this thread. :slight_smile:

As with all other methods of ingest we do testing on production equipment but on isolated (“preview”) boxes to help ensure that testing doesn’t destabilize the production gateways. For this testing it’s only the ingest server that’s isolated; the stream traffic goes through the rest of our production infrastructure exactly as if it came from a production ingest server.

Not a big surprise, but with new, untested encoders and a new ingest method there have been some issues which took down one of the the Paris preview ingest servers a few times. This is what affected Alejandro. We were not blocking his streams.

Testing has been going much better this week, and I expect to move at least some of these customers to production gateways in the next few weeks. The one area that I am still concerned about is the retry mechanism. In the case that took down Alejandro the customer’s custom encoder / PushPublish retry mechanism got out of control and basically DOS-attacked the machine. I personally haven’t gotten far enough into the setup to understand where the retries were coming from, but I’m sure we’ll have this all sorted out in the next few days. To be fair, it seems like every encoder we bring on has issues with retries, even many of the $20k rackmount appliances.

I’m very excited to have this module become available to the community. It offers a new, rich set of options to our customers to allow them to ingest different stream types and have tighter control over their stream publishing, while still being able to take advantage of our worldwide, high capacity system. Big kudos to Charlie for once again getting functionality out into the ecosystem which gives folks the flexible tools that allow them to innovate in unexpected ways.

Denis,

Charlie shot me an email later. Looks like there’s enough API there to do the

exponential backoff. Please get in touch with me off-thread and cc: msmith so we can help you get this going.

I don’t have any more info on the startup-all-at-once issue. The main issue right now on our side is that the authentication requests come in all at once. I’m already caching completed auth requests from our back end, but the code doesn’t yet queue on pending results. I’ll be adding that soon, and that that point I believe we should be able to start a lot more at once, maybe 100.

At a certain point, though, something else will fall down from hundreds of simultaneous starts, so IMO we need to throttle the starts regardless of my change.