package com.castlabs.dash.dashfragmenter.formats.csf;
import com.castlabs.dash.dashfragmenter.mp4todash.BoxComparator;
import com.coremedia.iso.IsoFile;
import com.coremedia.iso.boxes.Container;
import com.googlecode.mp4parser.DataSource;
import com.googlecode.mp4parser.FileDataSourceImpl;
import com.googlecode.mp4parser.authoring.Movie;
import com.googlecode.mp4parser.authoring.Track;
import com.googlecode.mp4parser.authoring.builder.DefaultFragmenterImpl;
import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
import com.googlecode.mp4parser.authoring.tracks.CencEncryptingTrackImpl;
import com.googlecode.mp4parser.util.UUIDConverter;
import org.junit.Test;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.util.UUID;
public class DashEncryptedBuilderTest {
@Test
public void stabilize() throws IOException {
DashBuilder dashEncryptedBuilder = new DashBuilder();
Movie m1 = MovieCreator.build(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile() + "/v1.mp4");
Movie m2 = new Movie();
Track t = m1.getTracks().get(0);
UUID keyId = UUIDConverter.convert(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
SecretKey key = new SecretKeySpec(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, "AES");
CencEncryptingTrackImpl cencEncryptingTrack = new CencEncryptingTrackImpl(t, keyId, key,true);
m2.addTrack(cencEncryptingTrack);
dashEncryptedBuilder.setFragmenter(new DefaultFragmenterImpl(-1));
Container i1 = dashEncryptedBuilder.build(m2);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
i1.writeContainer( Channels.newChannel(baos));
FileChannel fc = new FileOutputStream("v1-reference.mp4").getChannel();
i1.writeContainer(fc);
DataSource dataSourceRef = new FileDataSourceImpl(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile() + "/v1-reference.mp4");
IsoFile i2 = new IsoFile(dataSourceRef);
BoxComparator.check(i1, i2, "/moov[0]/mvhd[0]", "/moov[0]/trak[0]/tkhd[0]", "/moov[0]/trak[0]/mdia[0]/mdhd[0]");
}
}