Closed wilaw closed 6 years ago
Hi Will, thanks for the feedback, these are good points. Re-use of existing standards like DASH or fragmented MP4 is key for sure for the draft specification. The one thing that we are not sure about is if the encoder has enough information to create the manifest (anticipating the future in a way). Also it could be challenging to keep track of manifest and streams in a synchronized way. Also DASH does not define at what pace segments should be send and how to handle failovers and so on in case of using POST we see this as a problem with this approach. To be honest, the draft specification was just to trigger the discussion, for the upcoming conference call it will also be important to nail down the requirements and so on, but it is also good to consider different options/directions for the specification. It will be interesting to hear the view of others on this,but for is this approach was quite problematic, some of the larger encoder vendors will join the discussion later today, talk to you soon, best Rufael
AWS Elemental endorses this position as well. Basing the contribution specification off of the MPEG-DASH specification (multiple segments, multiple POST requests) seems like a valuable way to go.
DASH is a client only protocol, it does not have any parts related to the ingest to processing nodes such as unified origin, so if we want to go for this MPEG DASH still needs to be updated and this needs to be added to the MPEG DASH standard, is this the path we want to follow ? Regarding the approach proposed by Will, this may work for ingesting to a CDN, but for ingesting towards an origin/media processing node typically comes before the CDN and has other requirements, ingesting DASH raises many issues to video streaming platforms. I have uploaded a document describing some of the issues under ingest docs (under ingest docs) and the responsibilities of the different components in the workflow. For us these issues need to be discussed and adressed if we want to pursue this approach. Second if we pursue this approach we need a starting point, does anyone have text for this specification, it needs to be uploaded in order to discuss it in the next call, if we have text on this we can use it as a starting point if we can adress the issues that we raised in our document. If these issues can be adressed Unified Streaming can support such an approach, this would be good as we would like to be alligned with your preferred approach, however the current state of DASH ingest is not suitable for us as it needs a lot of improvement to be suitable for the processing done. Some of the issues encountered with DASH ingest are the following:
To summarize the DASH manifest adds a lot of undesirable overhead to the video streaming workflows, we think the DASH manifest can be added but should not be leading the ingest, we think the manifest should just serve as a helper to CDN passthrough, but most information should be contained in the MP4 streams that contain both the meta and media data relevant for the media processing. thanks
The wider problem for broadcasters is that we have two layers of contribution; mezzanine transport stream to distribution encode and distribution encoder to packager/origin.
CDN to broadcaster owned origin is a well established pattern.
There is a path where uncompressed HDSDI into contribution encode simply becomes transport streams contributed directly from broadcast systems (given transport stream is how broadcast itself is transmitted). Time based metadata in Transport Steam is a well tried and tested mechanism for contribution.
For me the the first question should be where does the 'IP push' layer reside, I see two possibilities:
Distribution encode push: Distribution encode converges 'closer' to broadcast systems to become the new contribution layer (I think this is the approach under discussion) - this does seem to require some standardisation if the approach carries on.
Mezzanine encode push: The final push step is effectively at the mezzanine layer and distribution encoder converges into the broadcaster owned origin where it is simply then a matter of writing transcodes to a file system of a origin operated by the same entity. The need for a standard here for interchange would seem less necessary as 'both sides' are owned by the origin vendor.
I'd be interested to hear views on this.
Replying to last Unified Streaming post (and trying not to fork away from the question Matt is asking which is valuable), I wanted to address some of the questions around using DASH as an ingest format. Firstly, I agree that DASH as it stands today is clearly intended as a client playback format. To use it for contribution, we would need to apply additional restrictions that are appropriate for contribution (such as retry logic, limit to relative URLs, unique paths and maybe event addressing schemes). I provide some answers below to the issues raised. These are not intended to be authoritative in any sense and I am open to debate on any of them:
I think DASH ingest will work for the passive processing entities after adressing some of these issues incorporated in the updated draft spec. For media ingest to active processing entities like Unified Origin we reviewed the proposal and counter propose the following to get this working with USP which makes more sense to us than putting a lot of work in resolving this long list of issues which is only partially resolved by wills comments:
OK we discussed many of the issues in the call, we will continue to work with separate issues addressing specific points in the draft specification, keeping it inline with what will initial proposed but also fitting USP requirements and work done in the past with different encoder vendors, I will close this issue in a few days.
The proposed spec opens with the statement that "unfortunately MPEG-DASH [2] is a client only protocol. MPEG DASH seems not suitable for pushing content from a live encoder to a media processing function, as it only supports pull based requests based on existing manifest".
DASH is a presentation description. It is agnostic as to whether it is interpreted by a client or server. It does describe URLs where content can be retrieved. It also importantly describes the relationship between the media segments (are they part of a switching set for example), what their resolution, codec and mime-type is, frame rate etc. In general it describes in precise detail a collection of media segments that an encoder may be producing. In this respect it seems a good candidate to describe the output of an encoder which is being sent to an origin ingest point. If not, then we need to reinvent something very similar in order to describe the relationship between the segments that are being sent, which is basically what the proposed document does. This seems unnecessary in my opinion.
The encoder already knows how to produce a DASH manifest and segments. The only change it would need to make is for it to POST the segments to the origin instead (or perhaps in addition to) writing them to disk. The origin, upon receiving a manifest, can then prep itself to receive the content defined by that manifest. If we set the rules that
Encoder POSTs a manifest at some origin http://someoriginservice.com/live/customerA/manifest.mpd
The origin receives this and checks to see if this is an update on an existing manifest. if not, then it cues up a new session using "http://someoriginservice.com/live/customerA/" as the keyID.
The encoder then starts POSTING segments, for example: http://someoriginservice.com/live/customerA/adaptionset1/representation1/segment1.cmfv
As each segment is received, the origin pattern-matches against its open sessions. IN this case, it sees that this post matches the ID "http://someoriginservice.com/live/customerA/" and that therefore this segment must belong to something described by that manifest. It looks through its stored copy of the manifest, and figures out that "adaptionset1/representation1/segment1.cmfv" represents content for a particular adaptionset and representation. Furthermore, the manifest contains all the info it might need to know about this segments (codec, duration, resolution etc).
The origin can then do what it needs to do with this segment. That may be to send it off for further transcoding (if this input stream is a SBR mezz stream), or simply to pass it through. Pass-through becomes simple, because all the origin has to do is rewrite the URL templates in the manifest to use the actual delivery hostname and path configuration.
Akamai has something very similar to this for HLS ingest today and we will be adding DASH support in the future. I'd prefer to use an MPEG standard that already exists for media ingest than create a new one.