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

Hi Richard,

It still seems to put it’s own string in front:

WowzaProLiveRepeater FMLE/3.0 (compatible; FMSc/1.0)

Anyway to change that?

This comes up in the Wowza log on another server that I’m pushing to for testing purposes, which is what I’m using to check the user agent string at the moment. This API call only seems to change the part which usually appears in parenthesis.

Hi Richard,

Just to comment on pushpublish from the edge server - I remember trying this couple of days ago and only seeing a “create” event, not “publish” in the log. However it might have been not a liverepeater, but rtsp restream application - do you think pushpublish still should have worked?

Hi Joe,

can you tell me how you have solve the streaming problem to ustream? I’m still hanging around… Connection ok, but the channel will not start and I can’t see any stream.

Thanks alot!!

regards,

Tom

Hi

I am trying to use the PushPublish API to push a stream between two Wowza servers hosting the same live application. I am able to push the stream to the other origin server as long as i do not use RTMPAuthentication on the server receiving the push.

<Module>
   <Name>ModuleRTMPAuthenticate</Name>
   <Description>ModuleRTMPAuthenticate</Description>
   <Class>com.wowza.wms.plugin.security.ModuleRTMPAuthenticate</Class>
</Module>

I am seeing a lot of different flavours regarding request urls parameters (when pushing to different CDNs etc), what is the standard way of doing this when pushing between Wowza servers? I use the snippet below in my test-plugin.(and Origin2 is using test test as username/password)

PushPublishRTMPAuthProviderAdobe adobeRTMPAuthProvider = new PushPublishRTMPAuthProviderAdobe();
adobeRTMPAuthProvider.init(publisher);
adobeRTMPAuthProvider.setUserName("test");
adobeRTMPAuthProvider.setPassword("test");                                                
publisher.setRTMPAuthProvider(adobeRTMPAuthProvider);

Is there another way of doing this when pushing between Wowzas?

/Kristian

@Kristian,

Add the following line before publisher.connect()

// add:
publisher.setConnectionFlashVerion("FMLE/3.0");

publisher.connect();

Richard

Thanks! This seems to solve the problem.

I would like to clarify that this is NOT included in the package example.

/Kristian

I had this working before and now am a bit stumped. I upgraded to the latest version of the plugin. It looks like it is working in the log, but I’m not getting anything from Akamai. I tried publishing right from FMLE and that works fine. The publisher.setRemoveDefaultAppInstance(true); doesn’t seem to be working, but I recall it worked fine before with that instance in the url.

String username = ****;

String password = ****;

publisher.setAppInstance(appInstance);

publisher.setSrcStreamName(“test”);

// Destination stream

publisher.setHostname(“p.ep49790.i.akamaientrypoint.net”);

publisher.setPort(1935);

publisher.setDstApplicationName(“EntryPoint”);

publisher.setDstStreamName(“wowza_push_test@49790”);

publisher.setConnectionFlashVerion(“FMLE/3.0”);

// SecureToken shared secret

//publisher.setSecureTokenSharedSecret(“#ed%h0#w@1”);

publisher.setSendFCPublish(true);

publisher.setSendReleaseStream(true);

publisher.setSendOnMetadata(true);

publisher.setRemoveDefaultAppInstance(true);

// Uncomment if target server protected using RTMP authentication

PushPublishRTMPAuthProviderAdobe adobeRTMPAuthProvider = new PushPublishRTMPAuthProviderAdobe();

adobeRTMPAuthProvider.init(publisher);

adobeRTMPAuthProvider.setUserName(username);

adobeRTMPAuthProvider.setPassword(password);

publisher.setRTMPAuthProvider(adobeRTMPAuthProvider);

//publisher.setAkamaiUserName(username);

//publisher.setAkamaiPassword(password);

WMSLoggerFactory.getLogger(null).info("PushPublisherRTMP: Akamai Credentials - " + publisher.getAkamaiUserName() + “–” + publisher.getAkamaiPassword() );

WMSLoggerFactory.getLogger(null).info("PushPublisherRTMP: connecting to " + publisher.getContextStr());

publisher.connect();

publishers.put(stream, publisher);

2011-07-27 14:49:34 EDT comment server INFO 200 - PushPublisherRTMP: connecting to rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790 defaultVHost push definst 5.701 - - - - - - - - - - - - - - - - - - - - - - - - -

2011-07-27 14:49:34 EDT comment server INFO 200 - PushPublisher.sessionOpened[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790]: - - - 5.736 - - - - - - - - - - - - - - - - - - - - - - - - -

2011-07-27 14:49:34 EDT comment server INFO 200 - PushPublisher.resetConnection[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790]: com.wowza.wms.plugin.pushpublish.protocol.rtmp.PushPublisherRTMPSession@6e37d490 - - - 5.775 - - - - - - - - - - - - - - - - - - - - - - - - -

2011-07-27 14:49:34 EDT comment server INFO 200 - PushPublisher.sessionClosed[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790] - - - 5.798 - - - - - - - - - - - - - - - - - - - - - - - - -

2011-07-27 14:49:34 EDT comment server INFO 200 - PushPublisher.sessionOpened[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790]:

2011-07-27 14:55:45 EDT comment server INFO 200 - PushPublisher#PingResult.onResult[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790]: false - - - 377.158 -

Same results.

Not getting anything on my other wowza server. I was getting an authentication string in the log, but I commented out the auth part and now I get nothing.

That is my suspicion as well. Although I am pretty sure I had it working before even with that definst included.

I made some progress this morning.

2011-07-28 08:44:41 EDT comment server INFO 200 - PushPublisherRTMP: connecting to rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790 defaultVHost push definst 3.073 - - - - - - - - - - - - - - - - - - - - - - - - -

2011-07-28 08:44:41 EDT comment server INFO 200 - PushPublisher.sessionOpened[rtmp://p.ep49790.i.akamaientrypoint.net:1935/EntryPoint/definst/wowza_push_test@49790]: - - - 3.093 - - - - - - - - - - - - - - -

I no longer get the disconnects and there is something coming through from akamai now. http://support.akamai.com/flash/index.html?autostart=true&url=rtmp%3A//cp45648.live.edgefcs.net/live/wowza_push_test@49790 The player indicates bandwidth coming in, but there is no video or audio. When I restart Wowza a bit of audio and video will come through, but only for a split second. I don’t have anything else in my logs. I have confirmed that playing the video over RTSP and HLS right from wowza works fine.

Here is my current code:

// Source stream

publisher.setAppInstance(appInstance);

publisher.setSrcStreamName(“test”);

// Destination stream

publisher.setHostname(“p.ep49790.i.akamaientrypoint.net”);

publisher.setDstApplicationName(“EntryPoint”);

publisher.setDstStreamName(“wowza_push_test@49790”);

publisher.setPort(1935);

//publisher.setConnectionFlashVerion(“FMLE/3.0”);

// SecureToken shared secret

//publisher.setSecureTokenSharedSecret(“#ed%h0#w@1”);

publisher.setSendFCPublish(true);

publisher.setSendReleaseStream(true);

//publisher.setSendOnMetadata(true);

//publisher.setRemoveDefaultAppInstance(true);

publisher.setAkamaiUserName(username);

publisher.setAkamaiPassword(password);

WMSLoggerFactory.getLogger(null).info("PushPublisherRTMP: Akamai Credentials - " + publisher.getAkamaiUserName() + “–” + publisher.getAkamaiPassword() );

WMSLoggerFactory.getLogger(null).info("PushPublisherRTMP: connecting to " + publisher.getContextStr());

publisher.connect();

publishers.put(stream, publisher);

Got it working!

Here is my code in case anyone wants to reuse.

							// Source stream
							publisher.setAppInstance(appInstance);
							publisher.setSrcStreamName("test");

							// Destination stream
							publisher.setHostname(dstHost);
							publisher.setDstApplicationName(dstApp);
							publisher.setDstStreamName(dstStream);
							
							publisher.setPort(1935);

							publisher.setSendFCPublish(true);
							publisher.setSendReleaseStream(true);
							publisher.setSendOriginalTimecodes(true);
							
							publisher.setAkamaiUserName(akamaiUsername);
							publisher.setAkamaiPassword(akamaiPassword);

						
							
							publisher.connect();
							publishers.put(stream, publisher);

I got the latest version from sales and now it will not publish at all. Streams still play fine locally on Wowza.

This is new in the logs:

2012-01-27 13:36:49 EST comment server INFO 200 - PushPublisher#PingResult.onResult[rtmp://p.epxxxxx.i.akamaientrypoint.net:1935/EntryPoint/definst/testing@xxxxx]: false - - - 69.577 - -

The logging from my plugin still looks good:

2012-01-27 13:38:26 EST comment server INFO 200 - PushPublisher.sessionOpened[rtmp://p.epxxxxx.i.akamaientrypoint.net:1935/EntryPoint/definst/testing@xxxxx]: - - - 3.762

I was working with Akamai previous to posting here and we determined the video was not arriving at their FMS correctly. Here is the code I am using - https://github.com/telvue/WowzaAkamaiPushPlugin/blob/master/TelvueAkamiPushPlugin.java . Previous to the latest version of the plugin I downloaded the video was at least making it to Akamai, but now it seems (based on the Ping false) that it is not. I do the get the sessionOpened in the log and everything appears to be working.

Hey Folks,

I know CDNetworks isn’t in the recommended CDN list. Has anyone run into any issues with them or has any advice? One thing I’ve noticed is I believe it records even when publish is set to live. Playing back from rtmp://[ApplicationName]/ gets you the recording and rtmp://[ApplicationName]/definst/ gets you the live stream.

Cheers,

Pete

Hey Alejandro,

I have it working functionally. I’m just seeing if anyone has ever run into issues I should be aware about. Like having it records even though you’re pushing a ‘Live’ stream. Not too worried we’re testing all week and migrating to a recommended CDN.

  • Pete

Just curious,

Is there a reason you’re using PushPublisher between two wowza servers? I believe Live Stream Repeater is recommended between two wowza based CDNs. PushPublish is more for wowza to FMS/CDN. In any case I believe you need to send the info along the netstream metadata.

Cheers,

Pete

Hellas,

did anyone succesdfully push-publish a stream to ustream.tv ?

We already push streams to different CDN providers including livestream.com but have now an issue with ustream.tv.

We can successfully connect to the ingest server but we are able to publish the stream.

We tried already with different options of

publisher.setRemoveDefaultAppInstance(true);

publisher.setConnectionFlashVerion(“FMLE/3.0”);

without any success.

publisher.setHostname(“1.xxxxxxxxx.fme.ustream.tv”);

publisher.setPort(1935);

publisher.setDstApplicationName(“ustreamVideo”);

publisher.setDstAppInstanceName(“777xxxxx”);

publisher.setDstStreamName(“nilJslfZP83FFZLvBGR2DCxxxxxxxxx”);

Any ideas ?

Thanks in advance for your help.

Hi Richard,

thanks a lot for your assistance. Removing the line

publisher.setRemoveDefaultAppInstance(true);

doesn’t make a lot of difference. I get definitly connected but it looks to me that I get some sort of time out.

I see in the log about every 120 seconds

INFO server comment - PushPublisher.sessionClosed

INFO server comment - PushPublisher.sessionClosed: reconnect: isCurrentSession:true tryConnect:true

INFO server comment - PushPublisher.sessionOpened:

Regards

Joe

Richard

the encoding device is not capable of generating a rtmp ingest just an rtp/udp stream so we want to use the Wowza as an ingest service for different CDN’s.

Meanwhile I managed to publish the stream to ustream.tv and automatically get the channel online.

The issue was the way ustream.tv reads the rtmp connection string. But thanks to the pushpublish library you can manipulate different options.

The only thing I still see is the disconnect of the PushPublisher object and the reconnect.

INFO server comment - PushPublisher.sessionClosed

Regards

Joe