Welcome to our community

Be a part of something great, join today!

  • Hey all, just changed over the backend after 15 years I figured time to give it a bit of an update, its probably gonna be a bit weird for most of you and i am sure there is a few bugs to work out but it should kinda work the same as before... hopefully :)

Digital Cinema Package

Thanks Knut but are you sure ? I'm not an expert at all, I don't understand anything about these command-line things, but for the 1.6.34 version the change logs are :

- Added edit rate constants to AS_DCP.h (25, 30, 50, 60).

Doesn't that mean a possibility of adding 25 fps ?

Yes. You can make a 25 fps SMPTE DCP with asdcplib. Compiled asdcplib 1.6.34 again with the missing framerates added to asdcp-test.cpp and used -p 25 to wrap the jpeg2000 sequence/wav files in 25 fps MXF wrappers. Compiled opencinematools with the fixes/updated dependencies from Wolfgang and made a 25 fps dcp that plays ok on the doremi cinema server. Used openjpeg with the 24 fps setting to make the jpeg2000 sequence, according to John Hurst from Cinecert this should work ok with a 25 fps DCP.To do the color conversion I downloaded a trial of After Effects CS 5.

John Hurst from Cinecert gave me the missing framerates that should have been in asdcp-test and will be added to asdcp-test in the next release:

To modify asdcp-test, replace the PictureRate() and szPictureRate() in methods of the Command Options class (in asdcp-test.cpp) with the following:

Code:
//
  Rational PictureRate()
  {
    if ( picture_rate == 23 ) return EditRate_23_98;
     if ( picture_rate == 25 ) return EditRate_25;
    if (  picture_rate == 30 ) return EditRate_30;
    if (  picture_rate == 48 ) return EditRate_48;
    if (  picture_rate == 50 ) return EditRate_50;
    if (  picture_rate == 60 ) return EditRate_60;
    return  EditRate_24;
  }

  //
  const char* szPictureRate()
  {
    if  ( picture_rate == 23 ) return "23.976";
    if (  picture_rate == 25 ) return "25";
    if ( picture_rate  == 30 ) return "30";
    if ( picture_rate == 48 )  return "48";
    if ( picture_rate == 50 ) return "50";
    if ( picture_rate == 60 ) return "60";
    return  "24";
  }
 
Last edited:
Hey guys, I'm putting together a new site, dcinemaforum.com. It is something I've been wanting to do for awhile. My hope is that we can have a site where we can share all kinds of information about digital cinema, whether you are somebody trying to create content or a theater owner looking for information about projectors or whatever. There isn't much there at the moment and the structure is evolving. I've been putting up information about creating DCPs as a starting point. If you have any ideas, let me know.
 
Tiny DCP for testing SMPTE 429-5 compliance (Subtitle trackfiles) on cinema servers is up on http://github.com/wolfgangw/digital_cinema_tools/raw/master/dcp_s429-5_test.tar

It's been assembled with the test material from cinecert's site (http://www.cinecert.com/asdcplib/S429-5-test.tar.gz) and should display 1-2-3-4 on a black background (00:00:05:00 - 00:00:06:23). Let us know whether it works on your server.

See http://wiki.github.com/wolfgangw/digital_cinema_tools/misc for a note on how to build asdcplib's S429-5-cgi.cpp

Wolfgang,

There is a target in the Makefile for S429-5-cgi. I just typed make S429-5-cgi and it built fine, but haven't tried it. Did you try that?
 
Terrence, the last asdcplib version to provide a S429-5-cgi make target is v1.3.18 from February 2008. It's the version that's shipped with the last (and ancient) release of opencinematools. Current asdcplib version is v1.6.34.

There is no need (and I wouldn't recommend) to use anything from opencinematools' dep package. Actually, there is no need or good reason to use opencinematools in the first place: A number of problems in the code, development is stalled, the dev has expressed lack of time and money.

Using asdcplib directly to read out mxf metadata and writing xml with some tool is the way better option.
 
Terrence, the last asdcplib version to provide a S429-5-cgi make target is v1.3.18 from February 2008. It's the version that's shipped with the last (and ancient) release of opencinematools. Current asdcplib version is v1.6.34.

There is no need (and I wouldn't recommend) to use anything from opencinematools' dep package. Actually, there is no need or good reason to use opencinematools in the first place: A number of problems in the code, development is stalled, the dev has expressed lack of time and money.

Using asdcplib directly to read out mxf metadata and writing xml with some tool is the way better option.

I'm using asdcplib 1.6.34 and it has a S429-5-cgi target. Anyway, I was looking at the specs on our Dolby DSS100 and it only says it supports TI Cinecanvas for subtitles. The DSS200 says it supports TI Cinecanvas and SMPTE 428-7-2007. Have you been able to try out the timed text?
 
The test package doesn't ingest completely on a XDC Solo G3 (Solo server version 5.4.2.69, player driver version 5.24.13.12822, firmware 5.24.63.12822, ~ 3 months old versions). The ingest skips the timed text trackfile and presents the rest as ingested. Need to check with XDC for updates. The same, or along those lines, with EasyDCP Player+, error message is "unknown partition type". Their manual says so, though. As of now they don't support S429-5 resources.
 
Hello,
when Im change the framerate in asdcp.cpp like Knut Erik Evensen told us everything works fine but with two bugs:

- when i use -p 25 in asdcp-test for Video wrapping and -p 25 for audio wrapping then mkcpl, mkpkl and mkmap give me erro then sound file is not a 24/1 or 48/1 and cant open it. So I have no playlist file, packing file and I CAN NOT PLAY IT ON DOREMI SERVER.

- second thing - when i use -p 25 only for video wrapping audio file is ready and no error is on mkmap, mkcpl,mkpkl so I can play it on doremi but with very bad thing. Sound is not synchronised with video - i think is quicker but is only see that on dialog. Without dialog u can not see that. :)

Can u tell me, give my some advice what can i do? Thanks u.

Robert.
 
Hello,
when Im change the framerate in asdcp.cpp like Knut Erik Evensen told us everything works fine but with two bugs:

- when i use -p 25 in asdcp-test for Video wrapping and -p 25 for audio wrapping then mkcpl, mkpkl and mkmap give me erro then sound file is not a 24/1 or 48/1 and cant open it. So I have no playlist file, packing file and I CAN NOT PLAY IT ON DOREMI SERVER.

- second thing - when i use -p 25 only for video wrapping audio file is ready and no error is on mkmap, mkcpl,mkpkl so I can play it on doremi but with very bad thing. Sound is not synchronised with video - i think is quicker but is only see that on dialog. Without dialog u can not see that. :)

Can u tell me, give my some advice what can i do? Thanks u.

Robert.

You have to patch opencinematools like Wolfgang says here on his webpage:
http://wiki.github.com/wolfgangw/digital_cinema_tools/misc

Have posted the binaries I compiled on snow leopard on my webpage at: http://www.knuterikevensen.com/?p=125
Have not tested them on a clean snow leopard install.
 
Last edited:
and this is everything what is needed to get true playing with 25fps audio and video? Becouse error "cant open file" give me too mkmap and mkpkl... :(
 
Hello,

I have still problem with 25fps. Im not programmer but I put the fix (http://wiki.github.com/wolfgangw/digital_cinema_tools/misc) my friend who is and ho told me that by compiling for WIN was many errors. So DCP in 25fps still have problem under Windows (pic) "Invalid CompositionPlaylist File..."
Is here anyone who know compile this under windows for me? :undecided:
Mkcpl have error too when is used 3D file. But i think that all this trouble will repair with last Wolfgans patch "http://wiki.github.com/wolfgangw/digital_cinema_tools/misc"

Thank you a lot.

CLIPBOARD: http://leteckaposta.cz/592076953
 
KDM generation
I'm trying to read a KDM and generate KDMs for other DCI servers. I'm not sure if it is feasible.
What was easy: create a new self certified private and public key with openssl. The public key is a certificate that a DCP production workstation understands. In my case I use DVS Clipster. To make things easy I created a small single reel DCP. Then I told Clipster to create a KDM using the new certificate created with openssl. Clipster produced the KDM. Now I think it should be easy to extract from the KDM the AES key and decrypt the small test movie, using my new private key (even if I don't know yet which tool to use for extracting the key: openssl? xmlsec? ).
But the final goal is to generate new KDMs for other DCP servers. I know that all I need from the original DCP is the CPL, and the references inside the CPL have to match. But then I suppose I have to include in the new KDM some element that still I don't know how to produce: the root, intermediate and leaf certificates that are included at the end of each KDM, and the signature value. I imagine that if I could find the private key inside the Clipster I may just copy those elements from the KDM that Clipster produces for itself. From the private key I can build the public key (this is the way openssl do) and with it encode all the modified information. But if Clister keeps its private key secret (as DCI servers do) I need to produce the certificates and sign myself.
Probably in what I said there are lots of errors: any hint?
 
KDM generation part 2
I'll continue sharing my experiences hoping somebody is interested in DCP encryption.
My first goal was to see just an image after the decryption process.
The <Cipherdata> section of the KDM was succesfully decrypted using
base64 -di cipherdata.txt | openssl rsautl -inkey my_privkey.pem -decrypt -oaep > decoded-cipherData.bin
The resulting 138 bytes file corresponds to that defined in the SMPTE document S430.1. The last 16 bytes
contain the AES128 key.
Now that the key is available I only know two options: decrypt all the asset using mxfcrypt, or extract j2c files using "asdcp-test -x"
and then decrypt them using "openssl enc -d".
Unfortunately both solutions failed: mxfcrypt was just useful to understand that the even-odd bytes of the key found in the <cipherdata>
had to be swapped: if the key is wrong mxfcrypt complains (this is very helpful!). But then the unencrypted mxf file is
unusable: asdcp-test cannot open it, and easyDcpPlayer says that the index table is missing.
"openssl enc" needs the correct option: there are many aes128 variants. After many hours I discovered that DCI uses the CBC
block cipher mode, and no "salt" in the key. Unsure about "padding". But still openssl needs the IV (initialization Vector) in addition to the key.
Trying to give the key as a password (option lower -k) didn't work.
Now: why openssl needs key and IV and mxfcrypt only needs the key? I could not find the IV inside the mxf header. How to continue?
 
KDM generation part 2
I'll continue sharing my experiences hoping somebody is interested in DCP encryption.
Hi Fabrizzio! I'm really interested in KDM generation, unfortunatelly I'm not an expert in the area, so I don;t think I could help you, but just wanted you to know that I'm very interested in making a full open source DCP generation.
Thanks for sharing
 
Fabrizio, great to see someone working on this in the open.

wrt initialization vector: According to SMPTE 429-6-2006 (D-Cinema Packaging — MXF Track File Essence Encryption) -> section 9 (Reference Decryption Processing Model) -> 9.2.4 (Encrypted Triplet Decryption Module) the first 16 bytes (in network byte order) of a given input encrypted triplet's source value shall be used as the initialization vector used by the CBC mode.

Also, and again according to 429-6-2006, this is merely one of the needed components. You mention padding to 16 byte multiples and index table generation.

See AS_DCP.h and AS_DCP_AES.cpp from cinecert's/Hurst's asdcplib for an implementation of this.

Please keep posting your experiments and results. It's great you're digging into it.
 
I have figured out everything except for creating an actual KDM (I haven't spent the time on it yet).

I have created a self signed certificate and it worked on obtaining a kdm for the dci reference dcp, and I successfully decrypted the kdm using the source code provided in the dci specs, so far only got it to work on ubuntu. I can't test it fully since I don't have the reference DCP.

On windows I have not had any trouble encrypting and decrypting the essence (indivudual j2c frames/wav files). I'd really like to get my hands on a real DCP and KDM for my certificate to see if what I have tested to work in theory, will work on a real world DCP.

I'd be happy to share more details, let me know if anyone is interested.

I am a digital animation and visual effects student, but I'm doing this outside of class to learn more about the technical side of movie distribution.

I know it's a long shot, but does anyone know if it would be possible for someone like me to obtain a DCP for a feature film that is in 2nd run or home video status?
 
Hi Heath

On windows I have not had any trouble encrypting and decrypting the essence (indivudual j2c frames/wav files). I'd really like to get my hands on a real DCP and KDM for my certificate to see if what I have tested to work in theory, will work on a real world DCP.

Do you have acces to SMPTE 429-6-2006 (D-Cinema Packaging – MXF Track File Essence Encryption)? There are some important specifics the process needs to match.

I'd be happy to share more details, let me know if anyone is interested.

I think one of the best ways to share code and information is by setting up a public code repository (with something like googlecode or github). This gives you tools to track updates, feedback, some space for documentation etc. Your work can also become a catalyst for other interesting things when it's out in the wild. Also, as you mention that you're a student, these things are generally not frowned upon in a CV.
 
A Test And A Question...

A Test And A Question...

I've taken some time to make a test and this is the result:

This is the original footage as taken in Canon 7D
ORIGINAL.jpg


------------------------------------------------------------------
After Effects XYZ Gamma 2.6
AE-RenderXYZ.jpg


------------------------------------------------------------------
Fusion RGB to XYZ
FUSION-Render.jpg


------------------------------------------------------------------
Nuke RGB to Cineon - I didn't find any XYZ colorspace in Nuke, but I assume Cineon is XYZ.
NUKE-Render.jpg



--------------------------------------------------------------------
DCP IN EasyDCP Unregistered - Played in EasyDCP Player [unregistered]
--------------------------------------------------------------------
After Effects Sequence.
AE-easyDCP-Player%20EasyDCP.jpg


--------------------------------------------------------------------
Fusion Sequence
FUSION-easyDCP-Player%20EasyDCP.jpg


---------------------------------------------------------------------
NOTE: EasyDCP+ was unable to make a DCP from Nuke Cineon Sequence
---------------------------------------------------------------------


-------------------------------------------------------------------------
DCP IN EasyDCP Unregistered - Played in Stereoscopic Player [unregistered]
-------------------------------------------------------------------------

After Effects Sequence
AE-easyDCP-Player%20Steroscopic.jpg


----------------------------------------------------------------------
Fusion Sequence
FUSION-easyDCP-Player%20Steroscopic.jpg



-------------------------------------------------------------------------
DCP IN Opencinematools DcpMaker - Played in EasyDCP Player [unregistered]
-------------------------------------------------------------------------

After Effects Sequence
AE-DCP-Maker-Open-Player%20EasyDCP.jpg


-------------------------------------------------------------------------
Fusion Sequence
FUSION-DCP-Maker-Open-Player%20EasyDCP.jpg


-------------------------------------------------------------------------
Nuke Sequence
NUKE-DCP-Maker-Open-Player%20EasyDCP.jpg


-------------------------------------------------------------------------
DCP IN Opencinematools DcpMaker - Played in Stereoscopic Player [unregistered]
-------------------------------------------------------------------------

After Effects Sequence
AE-DCP-Maker-Open-Player%20Stereoscopic.jpg


-------------------------------------------------------------------------
Fusion Sequence
FUSION-DCP-Maker-Open-Player%20Stereoscopic.jpg


-------------------------------------------------------------------------
Nuke Sequence
NUKE-DCP-Maker-Open-Player%20Stereoscopic.jpg


As you may notice in this test, only AE XYZ colorspace plays OK in both EasyDCP player and Stereoscopic player. This is kind of weird because only Stereoscopic player can convert on the fly to RGB colorspace. Another thing is that EasyDCP+ could not make a DCP from Nuke cineon and opencinematools made it.
I don't really know what happened with Fusion and Nuke colorspace that didn't play OK on Stereoscopic Player. Well, I'm not rich guy. I don't have Fusion nor Nuke. I had to drive 150 miles to a friend to make those sequences and maybe I didn't use the correct parameters. Any comment or test will be highly appreciated.
And my question is: After I have the DCP, what am I supposed to do to have this played in a cinema digital projector?
Hope this will help for those having Fusion or Nuke.
 
Nuke RGB to Cineon - I didn't find any XYZ colorspace in Nuke, but I assume Cineon is XYZ.

The Nuke Colorspace node does have CIE-XYZ as an option, certainly in the current version. Cineon is NOT XYZ.
 
Back
Top