Forum Discussion

kaspareit's avatar
kaspareit
Visitor
13 years ago

Akamai's "Universal Streaming" to HLS

Is anyone using this yet?: http://www.akamai.com/dl/brochures/stream_packaging_universal_streaming.pdf
Akamai has rolled out its 'Universal Streaming' which takes a rtmp input and outputs HLS and HDS. The resulting m3u8 seems to work on an iphone, but have not yet had success with the HLS stream on the roku. Granted, I've not used hls before, we currently use smooth streaming.

I'm sure I'm missing something simple...
<contentQuality>SD</contentQuality>
<streamFormat>hls</streamFormat>
<media>
<streamFormat>hls</streamFormat>
<streamQuality>SD</streamQuality>
<streamBitrate>0</streamBitrate>
<streamUrl>http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/master.m3u8</streamUrl>
</media>
<synopsis>Live Stream</synopsis>
<genres>Live</genres>
<runtime></runtime>

10 Replies

  • Actually, I believe the one above media is the one that needs to stay. You can't mix stream formats, so there should only be one per content element, not per media element.
  • Actually the problem is the stream. Roku doesn't like the m3u8 playlist being served by Akamai, but I don't know why. Other test streams are working.

    receiving this error:
    showHomeScreen | msg = ConnectionContext failure | index = 0
    Video status: 0 0
    showHomeScreen | msg = There was an error in the HTTP response. This could mean
    that malformed HTTP headers or an HTTP error code was returned.
    | index = -1
    Video request failure: -1 0
  • roSystemLog can be a useful tool when these types of problems. I tinkered with this a bit last night and was seeing lots of 404s.

    ---- AA ----
    Status: ok
    LogType: http.connect
    TargetIp: 209.170.78.208
    HttpCode: 200
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/master.m3u8
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/master.m3u8
    Method: GET
    ------------
    ---- AA ----
    Status: httperror
    LogType: http.error
    TargetIp: 209.170.78.208
    HttpCode: 404
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-b.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-b.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    ---- AA ----
    Status: httperror
    LogType: http.error
    TargetIp: 209.170.78.208
    HttpCode: 404
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-p.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-p.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    ---- AA ----
    Status: ok
    LogType: http.connect
    TargetIp: 209.170.78.208
    HttpCode: 200
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_1_av-b.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_1_av-b.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    20
    0
    Stream started.
    isStreamStarted
    ---- AA ----
    StreamBitrate: 0
    MeasuredBitrate: 1246
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/master.m3u8
    IsUnderrun: false
    ------------
    ---- AA ----
    Status: ok
    LogType: http.connect
    TargetIp: 209.170.78.208
    HttpCode: 200
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_1_av-p.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_1_av-p.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    ---- AA ----
    Status: httperror
    LogType: http.error
    TargetIp: 209.170.78.208
    HttpCode: 404
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-b.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-b.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    ---- AA ----
    Status: httperror
    LogType: http.error
    TargetIp: 209.170.97.114
    HttpCode: 404
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-p.m3u8?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/index_2_av-p.m3u8?sd=10&rebase=on
    Method: GET
    ------------
    ---- AA ----
    Status: httperror
    LogType: http.error
    TargetIp: 209.170.97.114
    HttpCode: 404
    Datetime: ?roDateTime?
    OrigUrl: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/segment135828403_1_av-b.ts?sd=10&rebase=on
    Url: http://waterhls-lh.akamaihd.net/i/wateroflife_1@99013/segment135828403_1_av-b.ts?sd=10&rebase=on
    Method: GET
    ------------
  • Just heard from an Akamai tech and he informs me that their servers should recognize a roku box and serve it the correct hls stream.

    ...So, now I'm working with akamai's customer care to resolve...
  • Did you ever get this issue resolved? I am getting the same error message.
  • For all the URLs posted on this thread I'm seeing errors like this if I plop it into a web browser:

    An error occurred while processing your request.

    Reference #181.1de43e17.1372277578.6a38298


    which would tend to imply that the URL has expired or that it is not a correctly formatted url.

    Known issues with Akamai HLS streaming that may require an Akamai customer to interface with their support contact to resolve:

    • Akamai may have an improper config set that results in packaging the HLS segments without the proper SPS/PPS info at the beginning of each fragment. That config means that the segments are not starting with a key frame. Akamai can fixed this on a case-by case basis (in other words, each new customer may have to contact Akamai to get this working). The notable symptoms are macroblocking, image freezes, you may see audio and video buffer underruns as well.

    • Akamai's HLS streaming system by default seems to use HTTP 1.0, Roku requires HTTP 1.1, for the keep-alive.

    • With at least one of our partners using Akamai, we are still seeing frequent rebuffering, even though the above issues seem to have been fixed for that partner, and this *may* to be due to HLS segments not arriving at the edge servers in a timely fashion. If you are seeing 404 messages, this might be relevant.

    Of course, we are also working to make our HLS playback system more resilient.

    - Joel
  • Actually the Akamai HLS stream issue could just be related to the fact you're not setting the cookies on the player from the request of the m3u8 file. Without the cookies akamai won't let the player play the streams. We had to do a request against the m3u8 file first to get the header and pull the cookie info off of it then pass it into the player for our roku app to be able to play the akamai hls streams. The renditions were not being recognized correctly by roku and the app was just playing the first rendition in the list and never did any adaptation. We manually parsed out the renditions from the m3u8 file and passed the streams to the roku player manually and now the roku will meter the network and select the right stream on the start of playback instead of the user having to wait for the hls stream to adapt to the right rendition.
  • "j.saterfiel" wrote:
    We manually parsed out the renditions from the m3u8 file and passed the streams to the roku player manually and now the roku will meter the network and select the right stream on the start of playback instead of the user having to wait for the hls stream to adapt to the right rendition.


    If I understand what you did correctly, your stream will never adapt. It may start with the variant you want, but if a user has a slow connection or encounters a period of network congestion, it will rebuffer rather than downshift. When using HLS you should always define exactly one stream in your content-meta-data.

    The better solution for controlling which variant is used at startup is to experiment with the minBandwidth, maxBandwidth, and switchingStrategy attributes.