Class PushPublishHTTPCupertinoAkamaiMSL5Handler
Object
com.wowza.wms.pushpublish.model.PushPublishBase
com.wowza.wms.pushpublish.model.PushPublishHTTPBase
com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertino
com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiMSL5Handler
- All Implemented Interfaces:
com.wowza.wms.pushpublish.akamai.IPushPublishAkamai,IPushPublish,IPushPublishHTTPGroupMember,IPushPublishHTTPOutputBuilder,IPushPublishHTTPCupertino
public class PushPublishHTTPCupertinoAkamaiMSL5Handler
extends com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
Akamai Media Services Live 5 (MSL5) HLS push-publish handler.
Wire shape (HTTP PUT, primary/backup convention) is identical to MSL4 so this class
inherits transport, playlist, and redundancy logic from
PushPublishHTTPCupertinoAkamaiHandler. It diverges in:
- Hostname resolution — routes through
PushPublishAkamaiUtils.initIngestHostnameMSL5(com.wowza.wms.pushpublish.akamai.IPushPublishAkamai)which targets[p|b]-ep{streamId}.i.mslentrypoint.netand the UUID streamId form. - Default User-Agent — pinned to a placeholder MSL5 value pending Akamai encoder qualification (see akamai-msl5-migration-plan.md, Open Q #3).
- Playback hostname optional — MSL5 customers bring their own CDN, so playback host
is optional on the wizard. When omitted, relative playlists are forced and the
master-playlist URI write is skipped, since the parent's MSL3.2
.akamaihd.netdefault doesn't apply and the{playback.hostname}sentinel would crashnew URI(...)downstream. - Log destination data — tagged
"msl":"5"so operators can distinguish MSL4 vs MSL5 sessions in logs. - Flat path layout — MSL5 ingest/playback paths are flat
(
{streamId}(-b)/{event_name}/<filename>) per Akamai's MSL5 HLS spec. Both the/dstStreamNamesub-folder (includeDstStreamNameInPath()) and the adaptive-group sub-folder (includeAdaptiveGroupInPath()) are suppressed. - ABR rendition naming — because the path is flat, multiple renditions in an adaptive
group are differentiated by filename (rendition-stemmed:
720p_chunklist.m3u8,720p_media_5.ts) rather than by sub-folder. The group master then references them as flat siblings, matching the MSL5 spec'smaster.m3u8 -> iphone400.m3u8convention.
-
Field Summary
Fields inherited from class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertino
addEndListOnDisconnect, chunkDurationTarget, CHUNKLISTNAME_AUDIOONLY, CHUNKLISTNAME_AUDIOVIDEO, CHUNKLISTNAME_KEYFRAMEONLY, CHUNKLISTNAME_VIDEOONLY, CHUNKLISTNAMES, cupertinoTemplateStringReplacer, keepMediaSegmentDataAfterSending, liveStreamPacketizerCupertino, minNumToDelete, minNumToSend, PLAYLISTNAME, pusher, RENDITION_AUDIOONLY, RENDITION_AUDIOVIDEO, RENDITION_KEYFRAMEONLY, RENDITION_SUBTITLES, RENDITION_VIDEOONLY, RENDITIONINDEX_AUDIOONLY, RENDITIONINDEX_AUDIOVIDEO, RENDITIONINDEX_COUNT, RENDITIONINDEX_KEYFRAMEONLY, RENDITIONINDEX_SUBTITLES, RENDITIONINDEX_VIDEOONLY, SUBTITLELISTNAME, TAG_TYPE_MEDIA, TAG_TYPE_STREAM_INFFields inherited from class com.wowza.wms.pushpublish.model.PushPublishHTTPBase
CACHE_CONTROL_FACTOR, CACHE_CONTROL_HEADER, CACHE_CONTROL_HEADER_KEY, CACHE_CONTROL_HEADER_NONE, CACHE_CONTROL_MEDIA_DEFAULT, httpLogManifests, httpManifestDebug, INDETERMINATE_PLAYLIST_COUNT, maxSegmentCountFromMap, maxSegmentCountFromPacketizer, MIN_PLAYLIST_COUNT, playlistAcrossSessions, playlistBaseUrl, playlistCountFromMap, playlistCountFromPacketizer, playlistCrossName, playlistDurationFromMap, playlistMap, playlistName, playlistTimeout, relativePlaylistsFields inherited from class com.wowza.wms.pushpublish.model.PushPublishBase
appInstance, className, DESTINATION_BAK, DESTINATION_PRI, DESTINATION_RED, destinationName, destinationServer, dstStreamName, entryName, hostname, inetAddr, isAdaptiveStreaming, isExternalRedundancy, logger, mImplementation, myMap, password, playbackHostname, port, portConfigured, profile, properties, pushPublishSession, pushPublishStreamDebug, pushPublishType, reconnectWaitTime, sendingPerformance, srcStream, srcStreamName, totalIOPerformance2Last, totalIOPerformanceLast, userNameFields inherited from interface com.wowza.wms.pushpublish.model.IPushPublish
CONNECTED_STATE_CONNECTED, CONNECTED_STATE_CONNECTING, CONNECTED_STATE_NOT_CONNECTED, CONNECTED_STATE_WAITING, PUSHPUBLISH_MAP_PATH_FIELD_NAME, PUSHPUBLISH_TYPE_CUPERTINO, PUSHPUBLISH_TYPE_MPEGDASH, PUSHPUBLISH_TYPE_NOTIFY_PACKET, PUSHPUBLISH_TYPE_RTMP, PUSHPUBLISH_TYPE_RTP, PUSHPUBLISH_TYPE_RTP_BUFFERED, PUSHPUBLISH_TYPE_SANJOSE, PUSHPUBLISH_TYPE_SRT, PUSHPUBLISH_TYPE_UNKNOWN, PUSHPUBLISH_TYPE_WEBRTC_WHIPFields inherited from interface com.wowza.wms.pushpublish.model.IPushPublishHTTPOutputBuilder
PUSHER_ERROR_LIVEPACKETIZER_NOT_CONFIGURED, PUSHER_ERROR_RENDITIONS_MISCONFIGURED -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidconnect()Get a JSON formatted string of data that represents the destination to include with the connect/disconnect loggingprotected booleanprotected booleanvoidLoads map and profile parametersprotected voidlogPushFailure(String method, String kind, URI uri, HTTPByteReaderResult result, Throwable t) protected voidHook for subclasses to swap in a different ingest-hostname resolver.intsendGroupMasterPlaylist(String groupName, PlaylistModel playlist) Sends a group master playlist to the destination.intsendMasterPlaylist(PlaylistModel playlist) Sends the master playlist to the destination.intsendMediaPlaylist(PlaylistModel playlist) Sends the media playlist to the destination.intsendMediaSegment(MediaSegmentModel mediaSegment) Sends the media (chunk) to the destination; media provided as a fragment list.booleanupdateMasterPlaylistPlaybackURI(PlaylistModel playlist) Skip the absolute master-playlist URI write when no playback host is configured.booleanupdateMediaPlaylistPlaybackURI(PlaylistModel playlist) In an adaptive group, prefix each rendition's media playlist (chunklist) filename with the rendition stem so the renditions don't collide in the flat MSL5 folder -- e.g.booleanupdateMediaSegmentPlaybackURI(MediaSegmentModel mediaSegment) Match the media-playlist renaming for segments: in an adaptive group, write each rendition's segments as flat, rendition-stemmed siblings (720p_media_5.ts) so they neither collide with other renditions nor require the MSL4 sub-folder layout.Methods inherited from class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
closeByteWriter, createByteWriter, deleteMediaSegment, destroyByteWriter, getAkamaiEventName, getAkamaiHostId, getAkamaiStreamId, getChunkDurationTarget, getDestinationURL, getGroupDestinationURL, getPlaylistProperties, getResolvedAkamaiStreamId, getResolvedAkamaiStreamId, getUserAgent, init, isAkamaiIngestAcceleration, isSendToBackupServer, outputClose, outputOpen, playlistKind, putMediaSegmentToUri, resetConnection, sendPlaylist, setAkamaiEventName, setAkamaiHostId, setAkamaiIngestAcceleration, setAkamaiStreamId, setSendToBackupServer, setUserAgent, updateGroupMasterPlaylistPlaybackURIMethods inherited from class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertino
adaptiveGroupPlaylistNeedsUpdating, addAudioMediaTag, addPlaylistToMasterPlaylist, addTagToPlaylist, addTagToPlaylist, createGroupPlaylist, createMasterPlaylist, createMediaPlaylist, createMediaSegmentModel, createOutputItem, createStreamInfTag, createTag, determinePlaylistSubstitutes, disconnect, disconnect, error, getAudioAutoselect, getAudioCodecId, getAudioDefault, getAudioName, getAudioTagTypesStr, getConnectedState, getContextStr, getGroupIdAudioString, getGroupPlaylistRenditionDescription, getHeaderSegment, getLanguageId, getLastChunkId, getLiveStreamPacketizerCupertino, getLiveStreamPacketizerName, getMediaPlaylistForRendtion, getMediaPlaylistPlaybackURL, getMediaPlaylists, getMediaPlaylistStr, getMessagesAttemptedCount, getMessagesFailedCount, getMessagesRetriedCount, getPacketizerLock, getPlaylistCount, getPlaylistReader, getRandomSessionStr, getRenditionsStr, isGroupReady, isInRedundancyPair, isRendition, loadMediaSegment, outputSend, prepareMediaPlaylist, printPlaylist, processPlaylistChunks, renditionIndexToRendition, renditionToPacketizerRendition, renditionToRenditionIndex, resetNewPacketizer, sendGroupPlaylist, setAudioAutoselect, setAudioCodecId, setAudioDefault, setAudioName, setAudioTagTypesStr, setLanguageId, setLiveStreamPacketizer, setPlaylistGroupidAudio, setRenditionsStr, writeTagToStringMethods inherited from class com.wowza.wms.pushpublish.model.PushPublishHTTPBase
getAdaptiveGroupName, getMaxSegmentCount, getPlaylistBaseUrl, getPlaylistMap, getPlaylistTimeout, isInAdaptiveGroup, isLogDebugManifest, isPlaylistAcrossSessions, isRelativePlaylists, logDebugManifest, setAdaptiveGroupName, setMaxSegmentCountFromMap, setMaxSegmentCountFromPacketizer, setPlaylistAcrossSessions, setPlaylistBaseUrl, setPlaylistCountFromMap, setPlaylistCountFromPacketizer, setPlaylistTimeout, setRelativePlaylistsMethods inherited from class com.wowza.wms.pushpublish.model.PushPublishBase
add, addIOPerformance2, clearLoggingValues, createPushPublishSession, getAppInstance, getBandwidth, getBaseParams, getDestinationID, getDestinationName, getDestinationServer, getDstStreamName, getEntryName, getHostname, getImplementation, getInetAddr, getMap, getMessagesOutBytes, getMessagesOutCount, getPassword, getPlaybackHostname, getPort, getProfile, getProperties, getPushPublishType, getReconnectWaitTime, getSrcStream, getSrcStreamName, getUserName, getWowzaStreamingEngineVersionStr, incrementMessagesOut, isAdaptiveStreaming, isDebugLog, isExternalRedundancy, isPortConfigured, logDebug, logError, logError, logError, logInfo, logWarn, resolveHostName, setAdaptiveStreaming, setAdaptiveStreaming, setAppInstance, setDebugLog, setDestinationName, setDestinationServer, setDestinationServer, setDstStreamName, setEntryName, setExternalRedundancy, setExternalRedundancy, setHost, setHostname, setImplementation, setInetAddr, setPassword, setPlaybackHostname, setPort, setPort, setProfile, setReconnectWaitTime, setSrcStream, setSrcStreamName, setStreamName, setUserName, updateLoggingValues, updateUsageTrackerMethods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.wowza.wms.pushpublish.model.IPushPublish
getFailureReason, isFailureRecoverableMethods inherited from interface com.wowza.wms.pushpublish.akamai.IPushPublishAkamai
getContextStr, getDstStreamName, getEntryName, getHostname, getPlaybackHostname, getSrcStreamName, isDebugLog, logDebug, logError, logError, logError, logInfo, logWarn, setDebugLog, setDstStreamName, setEntryName, setHostname, setPlaybackHostname, setSrcStreamNameMethods inherited from interface com.wowza.wms.pushpublish.model.IPushPublishHTTPGroupMember
getAdaptiveGroupName, isInAdaptiveGroup, isLogDebugManifest, supportsBackupDestinationMethods inherited from interface com.wowza.wms.pushpublish.model.IPushPublishHTTPOutputBuilder
getAppInstance, getDstStreamName, getSrcStreamName, isDebugLog
-
Constructor Details
-
PushPublishHTTPCupertinoAkamaiMSL5Handler
public PushPublishHTTPCupertinoAkamaiMSL5Handler() throws com.wowza.wms.server.LicensingException- Throws:
com.wowza.wms.server.LicensingException
-
-
Method Details
-
resolveIngestHostname
protected void resolveIngestHostname()Description copied from class:PushPublishHTTPCupertinoAkamaiHandlerHook for subclasses to swap in a different ingest-hostname resolver. MSL3/MSL4 usePushPublishAkamaiUtils.initIngestHostname(com.wowza.wms.pushpublish.akamai.IPushPublishAkamai); MSL5 overrides this to callPushPublishAkamaiUtils.initIngestHostnameMSL5(com.wowza.wms.pushpublish.akamai.IPushPublishAkamai)so the MSL4 resolver's WARN/ERROR noise doesn't fire for MSL5 streams.- Overrides:
resolveIngestHostnamein classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
-
load
Description copied from class:PushPublishHTTPBaseLoads map and profile parameters- Overrides:
loadin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
dataMap- the data map
-
connect
public void connect()- Specified by:
connectin interfaceIPushPublish- Overrides:
connectin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
-
updateMasterPlaylistPlaybackURI
Skip the absolute master-playlist URI write when no playback host is configured. Parent unconditionally callsnew URI(getStreamMasterPlaylistURI()), which would crash on the "undefined.akamaihd.net" MSL3.2 fallback or a sentinel literal. With relative playlists forced, the master playlist's own URI is meta and not needed.- Specified by:
updateMasterPlaylistPlaybackURIin interfaceIPushPublishHTTPCupertino- Overrides:
updateMasterPlaylistPlaybackURIin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
playlist- the master playlist model to update the URI in- Returns:
- true if the URI was updated
-
includeDstStreamNameInPath
protected boolean includeDstStreamNameInPath()- Overrides:
includeDstStreamNameInPathin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
-
includeAdaptiveGroupInPath
protected boolean includeAdaptiveGroupInPath()- Overrides:
includeAdaptiveGroupInPathin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
-
updateMediaPlaylistPlaybackURI
In an adaptive group, prefix each rendition's media playlist (chunklist) filename with the rendition stem so the renditions don't collide in the flat MSL5 folder -- e.g.chunklist.m3u8 -> 720p_chunklist.m3u8. The renamed URI propagates into the group master's#EXT-X-STREAM-INF/#EXT-X-MEDIAreferences, producing the flat-sibling layout MSL5 expects. Single-rendition keeps the parent behavior (no collision possible).- Specified by:
updateMediaPlaylistPlaybackURIin interfaceIPushPublishHTTPCupertino- Overrides:
updateMediaPlaylistPlaybackURIin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
playlist- to update the uri in- Returns:
- true if the playlist uri was updated
-
updateMediaSegmentPlaybackURI
Match the media-playlist renaming for segments: in an adaptive group, write each rendition's segments as flat, rendition-stemmed siblings (720p_media_5.ts) so they neither collide with other renditions nor require the MSL4 sub-folder layout. Setting the URI here also updates the reference written into the (renamed) chunklist, keeping them consistent.- Specified by:
updateMediaSegmentPlaybackURIin interfaceIPushPublishHTTPCupertino- Overrides:
updateMediaSegmentPlaybackURIin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
mediaSegment- to update the uri of- Returns:
- true if the uri was updated
-
getDestionationLogData
Description copied from class:PushPublishHTTPCupertinoGet a JSON formatted string of data that represents the destination to include with the connect/disconnect logging- Specified by:
getDestionationLogDatain interfaceIPushPublishHTTPCupertino- Overrides:
getDestionationLogDatain classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Returns:
- JSON formatted string representation
-
sendMediaSegment
Description copied from interface:IPushPublishHTTPCupertinoSends the media (chunk) to the destination; media provided as a fragment list.- Specified by:
sendMediaSegmentin interfaceIPushPublishHTTPCupertino- Overrides:
sendMediaSegmentin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
mediaSegment- the media file in fragment list form- Returns:
- number of bytes sent to output (less than zero implies the implementation does not support, 0 is a failure, > 0 is success)
-
sendMasterPlaylist
Description copied from interface:IPushPublishHTTPCupertinoSends the master playlist to the destination.- Specified by:
sendMasterPlaylistin interfaceIPushPublishHTTPCupertino- Overrides:
sendMasterPlaylistin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
playlist- the master playlist model- Returns:
- number of bytes sent to output (less than zero implies the implementation does not support, 0 is a failure, > 0 is success)
-
sendMediaPlaylist
Description copied from interface:IPushPublishHTTPCupertinoSends the media playlist to the destination.- Specified by:
sendMediaPlaylistin interfaceIPushPublishHTTPCupertino- Overrides:
sendMediaPlaylistin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
playlist- the media playlist model- Returns:
- number of bytes sent to output (less than zero implies the implementation does not support, 0 is a failure, > 0 is success)
-
sendGroupMasterPlaylist
Description copied from interface:IPushPublishHTTPCupertinoSends a group master playlist to the destination.- Specified by:
sendGroupMasterPlaylistin interfaceIPushPublishHTTPCupertino- Overrides:
sendGroupMasterPlaylistin classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler- Parameters:
groupName- the group nameplaylist- the group master playlist model- Returns:
- number of bytes sent to output
-
logPushFailure
protected void logPushFailure(String method, String kind, URI uri, HTTPByteReaderResult result, Throwable t) - Overrides:
logPushFailurein classcom.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
-