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.net and 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.net default doesn't apply and the {playback.hostname} sentinel would crash new 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 /dstStreamName sub-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's master.m3u8 -> iphone400.m3u8 convention.
  • 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: PushPublishHTTPCupertinoAkamaiHandler
      Hook for subclasses to swap in a different ingest-hostname resolver. MSL3/MSL4 use PushPublishAkamaiUtils.initIngestHostname(com.wowza.wms.pushpublish.akamai.IPushPublishAkamai); MSL5 overrides this to call PushPublishAkamaiUtils.initIngestHostnameMSL5(com.wowza.wms.pushpublish.akamai.IPushPublishAkamai) so the MSL4 resolver's WARN/ERROR noise doesn't fire for MSL5 streams.
      Overrides:
      resolveIngestHostname in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
    • load

      public void load(HashMap<String,String> dataMap)
      Description copied from class: PushPublishHTTPBase
      Loads map and profile parameters
      Overrides:
      load in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
      Parameters:
      dataMap - the data map
    • connect

      public void connect()
      Specified by:
      connect in interface IPushPublish
      Overrides:
      connect in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
    • updateMasterPlaylistPlaybackURI

      public boolean updateMasterPlaylistPlaybackURI(PlaylistModel playlist)
      Skip the absolute master-playlist URI write when no playback host is configured. Parent unconditionally calls new 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:
      updateMasterPlaylistPlaybackURI in interface IPushPublishHTTPCupertino
      Overrides:
      updateMasterPlaylistPlaybackURI in class com.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:
      includeDstStreamNameInPath in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
    • includeAdaptiveGroupInPath

      protected boolean includeAdaptiveGroupInPath()
      Overrides:
      includeAdaptiveGroupInPath in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
    • updateMediaPlaylistPlaybackURI

      public boolean updateMediaPlaylistPlaybackURI(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. chunklist.m3u8 -> 720p_chunklist.m3u8. The renamed URI propagates into the group master's #EXT-X-STREAM-INF/#EXT-X-MEDIA references, producing the flat-sibling layout MSL5 expects. Single-rendition keeps the parent behavior (no collision possible).
      Specified by:
      updateMediaPlaylistPlaybackURI in interface IPushPublishHTTPCupertino
      Overrides:
      updateMediaPlaylistPlaybackURI in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
      Parameters:
      playlist - to update the uri in
      Returns:
      true if the playlist uri was updated
    • updateMediaSegmentPlaybackURI

      public boolean updateMediaSegmentPlaybackURI(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. Setting the URI here also updates the reference written into the (renamed) chunklist, keeping them consistent.
      Specified by:
      updateMediaSegmentPlaybackURI in interface IPushPublishHTTPCupertino
      Overrides:
      updateMediaSegmentPlaybackURI in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
      Parameters:
      mediaSegment - to update the uri of
      Returns:
      true if the uri was updated
    • getDestionationLogData

      public String getDestionationLogData()
      Description copied from class: PushPublishHTTPCupertino
      Get a JSON formatted string of data that represents the destination to include with the connect/disconnect logging
      Specified by:
      getDestionationLogData in interface IPushPublishHTTPCupertino
      Overrides:
      getDestionationLogData in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
      Returns:
      JSON formatted string representation
    • sendMediaSegment

      public int sendMediaSegment(MediaSegmentModel mediaSegment)
      Description copied from interface: IPushPublishHTTPCupertino
      Sends the media (chunk) to the destination; media provided as a fragment list.
      Specified by:
      sendMediaSegment in interface IPushPublishHTTPCupertino
      Overrides:
      sendMediaSegment in class com.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

      public int sendMasterPlaylist(PlaylistModel playlist)
      Description copied from interface: IPushPublishHTTPCupertino
      Sends the master playlist to the destination.
      Specified by:
      sendMasterPlaylist in interface IPushPublishHTTPCupertino
      Overrides:
      sendMasterPlaylist in class com.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

      public int sendMediaPlaylist(PlaylistModel playlist)
      Description copied from interface: IPushPublishHTTPCupertino
      Sends the media playlist to the destination.
      Specified by:
      sendMediaPlaylist in interface IPushPublishHTTPCupertino
      Overrides:
      sendMediaPlaylist in class com.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

      public int sendGroupMasterPlaylist(String groupName, PlaylistModel playlist)
      Description copied from interface: IPushPublishHTTPCupertino
      Sends a group master playlist to the destination.
      Specified by:
      sendGroupMasterPlaylist in interface IPushPublishHTTPCupertino
      Overrides:
      sendGroupMasterPlaylist in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler
      Parameters:
      groupName - the group name
      playlist - 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:
      logPushFailure in class com.wowza.wms.pushpublish.protocol.cupertino.PushPublishHTTPCupertinoAkamaiHandler