package org.mp4parser.muxer.tracks;
import org.junit.Test;
import org.mp4parser.Container;
import org.mp4parser.muxer.InMemRandomAccessSourceImpl;
import org.mp4parser.muxer.Movie;
import org.mp4parser.muxer.Track;
import org.mp4parser.muxer.builder.DefaultMp4Builder;
import org.mp4parser.muxer.builder.FragmentedMp4Builder;
import org.mp4parser.muxer.builder.Mp4Builder;
import org.mp4parser.muxer.container.mp4.MovieCreator;
import org.mp4parser.tools.ByteBufferByteChannel;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.nio.channels.Channels;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
public class CencTracksImplTest {
@Test
public void testEncryptDecryptDefaultMp4() throws Exception {
SecretKey sk = new SecretKeySpec(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "AES");
Movie m = MovieCreator.build(
CencTracksImplTest.class.getProtectionDomain().getCodeSource().getLocation().getFile() +
"/org/mp4parser/muxer/samples/1365070268951.mp4");
List<Track> encTracks = new LinkedList<Track>();
for (Track track : m.getTracks()) {
encTracks.add(new CencEncryptingTrackImpl(track, UUID.randomUUID(), sk, false));
}
m.setTracks(encTracks);
Mp4Builder mp4Builder = new DefaultMp4Builder();
Container c = mp4Builder.build(m);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
c.writeContainer(Channels.newChannel(baos));
//c.writeContainer(new FileOutputStream("output.mp4").getChannel());
Movie m2 = MovieCreator.build(new ByteBufferByteChannel(baos.toByteArray()), new InMemRandomAccessSourceImpl(baos.toByteArray()), "inmem");
List<Track> decTracks = new LinkedList<Track>();
for (Track track : m2.getTracks()) {
decTracks.add(new CencDecryptingTrackImpl((CencEncryptedTrack) track, sk));
}
m2.setTracks(decTracks);
c = mp4Builder.build(m2);
//c.writeContainer(new FileOutputStream("output2.mp4").getChannel());
}
@Test
public void testEncryptDecryptFragmentedMp4() throws Exception {
SecretKey sk = new SecretKeySpec(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "AES");
Movie m = MovieCreator.build(
CencTracksImplTest.class.getProtectionDomain().getCodeSource().getLocation().getFile() +
"/org/mp4parser/muxer/samples/1365070268951.mp4");
List<Track> encTracks = new LinkedList<Track>();
for (Track track : m.getTracks()) {
encTracks.add(new CencEncryptingTrackImpl(track, UUID.randomUUID(), sk, false));
}
m.setTracks(encTracks);
Mp4Builder mp4Builder = new FragmentedMp4Builder();
Container c = mp4Builder.build(m);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
c.writeContainer(Channels.newChannel(baos));
//c.writeContainer(new FileOutputStream("output.mp4").getChannel());
Movie m2 = MovieCreator.build(new ByteBufferByteChannel(baos.toByteArray()), new InMemRandomAccessSourceImpl(baos.toByteArray()), "inmem");
List<Track> decTracks = new LinkedList<Track>();
for (Track track : m2.getTracks()) {
decTracks.add(new CencDecryptingTrackImpl((CencEncryptedTrack) track, sk));
}
m2.setTracks(decTracks);
c = mp4Builder.build(m2);
//c.writeContainer(new FileOutputStream("output2.mp4").getChannel());
}
}