/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.container.mkv.test;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.ttProject.container.IContainer;
import com.ttProject.container.IReader;
import com.ttProject.container.mkv.MkvBlockTag;
import com.ttProject.container.mkv.MkvTag;
import com.ttProject.container.mkv.MkvTagReader;
import com.ttProject.container.mkv.type.BlockGroup;
import com.ttProject.frame.AudioFrame;
import com.ttProject.frame.VideoFrame;
import com.ttProject.nio.channels.FileReadChannel;
import com.ttProject.nio.channels.IFileReadChannel;
/**
* mkv test
* @author taktod
*/
public class MkvTest {
/** logger */
private Logger logger = Logger.getLogger(MkvTest.class);
/**
* analyzer
*/
@Test
public void analyzerTest() {
IFileReadChannel source = null;
int lastPosition = 0;
try {
/*
* test2 3 4 5 7 8はh264 + aac or mp3
* test1 msmpeg4v2
*/
source = FileReadChannel.openFileReadChannel(
Thread.currentThread().getContextClassLoader().getResource("test.theoravorbis.mkv")
// Thread.currentThread().getContextClassLoader().getResource("test.mkv")
// Thread.currentThread().getContextClassLoader().getResource("test1.mkv") // myLib doesn't support msmpeg4v2.
// Thread.currentThread().getContextClassLoader().getResource("test2.mkv")
// Thread.currentThread().getContextClassLoader().getResource("test3.mkv")
// Thread.currentThread().getContextClassLoader().getResource("test4.mkv") // theora
// Thread.currentThread().getContextClassLoader().getResource("test5.mkv") // myLib doesn't support subtitle S_TEXT/UTF8
// Thread.currentThread().getContextClassLoader().getResource("test6.mkv") // myLib doesn't support msmpeg4v2.
// Thread.currentThread().getContextClassLoader().getResource("test7.mkv")
// Thread.currentThread().getContextClassLoader().getResource("test8.mkv")
);
IReader reader = new MkvTagReader();
IContainer container = null;
while((container = reader.read(source)) != null) {
// logger.info(container);
if(container instanceof BlockGroup) {
for(MkvTag tag : ((BlockGroup)container).getChildList()) {
if(tag instanceof MkvBlockTag) {
MkvBlockTag blockTag = (MkvBlockTag)tag;
// logger.info(blockTag);
logger.info(blockTag.getFrame());
}
}
}
if(container instanceof MkvBlockTag) {
MkvBlockTag blockTag = (MkvBlockTag)container;
// logger.info(blockTag);
// logger.info(blockTag.getFrame());
if(blockTag.getFrame() instanceof VideoFrame) {
VideoFrame vFrame = (VideoFrame)blockTag.getFrame();
logger.info(vFrame.getCodecType() + " " + vFrame.getWidth() + "x" + vFrame.getHeight());
}
else if(blockTag.getFrame() instanceof AudioFrame) {
AudioFrame aFrame = (AudioFrame)blockTag.getFrame();
logger.info(aFrame.getCodecType() + " " + aFrame.getSampleRate() + ":" + aFrame.getChannel());
}
}
lastPosition = source.position();
}
}
catch(Exception e) {
logger.warn(e);
try {
logger.warn("error position:" + Integer.toHexString(lastPosition));
}
catch(Exception ex) {
}
}
finally {
if(source != null) {
try {
source.close();
}
catch(Exception e) {
}
source = null;
}
}
}
}