Posting hls stream to aws mediapackage


I have the following media stream setup: EMX -> EML -> S3(hls) -> Lambda -> EMP I am not sure what the file name structure should be when I post to EMP. I am using {EMP hls ingest endpoint}/{the files created by EMP via EML}. I get a 201 on all files going into EMP which makes sense as the files themselves are okay but I can't get a manifest back from EMP(getting 404). Now I've noticed a few things

  1. When EML sends files to EMP; i checked ingress logs on EMP and the file name structure seems to be like {EMP hls ingest endpoint}_{EML output name}.m3u8 and {EMP hls ingest endpoint}_{EML output name}_{a time stamp: 20240425T062526}_{the sequence number provided by EML}.ts
  2. I've also noticed EML not generating a root manifest Can someone help me identify what I am missing?
3 Answers


The issue seems to be related to the missing root manifest file in your media stream setup using EMX, EML, S3(hls), Lambda, and EMP.


1.Configure EML for Root Manifest Generation: EML might require specific configuration to generate the root manifest file. You'll need to consult your EML documentation or support to understand how to enable this functionality. It might involve enabling a specific option or setting the output format.

2.Expected File Naming Structure: Based on your observations, EMP seems to expect a specific naming structure for the root manifest: {EMP hls ingest endpoint}_{EML output name}.m3u8 This suggests the root manifest should have the same base name as your individual segments but with the .m3u8 extension.

3.Root Manifest Content: The root manifest file itself should contain references to your individual media segments. It typically uses relative paths to specify the location of each segment within the HLS stream.


Imagine a folder on S3 containing your media segments. The root manifest file (e.g., my_stream.m3u8) would reside within the same folder and list the segments like this:

#EXTM3U #EXT-X-STREAM-INF: ... (stream properties)

#EXTINF:5, segment_00001.ts

#EXTINF:5, segment_00002.ts

#EXTINF:5, segment_00003.ts

... (and so on for all segments)

By providing this master playlist, EMP can understand the structure of your stream and locate the individual segments for playback.

profile picture
answered 3 months ago
reviewed a month ago
  • I fixed the root manifest not being generated issue; it was todo with EML not having permissions to delete files from the s3 bucket, I still get a 404 when I try to curl the manifest. I've noticed that despite lambda getting a 201 from EMP when it puts file into EMP; the EMP logs two entries for the same file; one that it says was a 401 and the other with a 201, I think thats where my issue is. But not sure how to proceed.


After a lot of twiddling and tinkering, we discovered that mediapackage needs the following file name structure to get a successful push.

if fileName == "index.m3u8": # this is your root manifest
  ingestUrl = f"{mediaPackageUrl}.m3u8"
   ingestUrl = mediaPackageUrl.replace('channel', fileName) # for all other resources, you need to feed it to the root endpoint.
answered 3 months ago
answered 2 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions