package com.flazr.io.flv;
import static org.junit.Assert.*;
import com.flazr.rtmp.RtmpMessage;
import com.flazr.rtmp.message.Audio;
import com.flazr.rtmp.message.MessageType;
import com.flazr.rtmp.message.MetadataAmf0;
import com.flazr.rtmp.message.Video;
import com.flazr.util.Utils;
import java.io.File;
import org.junit.Test;
public class FlvReaderTest {
private static final String FILE_PATH = "../temp";
private static final String FILE_NAME = FILE_PATH + "/test.flv";
private void writeFile(final boolean withMetadata) {
File temp = new File(FILE_PATH);
if(!temp.exists()) {
temp.mkdir();
}
FlvWriter writer = new FlvWriter(FILE_NAME);
if(withMetadata) {
writer.write(new MetadataAmf0("onMetaData"));
}
writer.write(new Audio(Utils.fromHex("00000000")));
writer.write(new Video(Utils.fromHex("00000000")));
writer.write(new Audio(Utils.fromHex("00000000")));
writer.write(new Video(Utils.fromHex("00000000")));
writer.close();
}
@Test
public void testRandomAccessOfMetadataAtom() {
writeFile(true);
FlvReader reader = new FlvReader(FILE_NAME);
RtmpMessage message = reader.getMetadata();
assertEquals(message.getHeader().getMessageType(), MessageType.METADATA_AMF0);
reader.close();
}
@Test
public void testFlvWithouMetadata() {
writeFile(false);
FlvReader reader = new FlvReader(FILE_NAME);
RtmpMessage message = reader.getMetadata();
assertEquals(message.getHeader().getMessageType(), MessageType.METADATA_AMF0);
reader.close();
}
@Test
public void testReadBackwards() {
writeFile(true);
FlvReader reader = new FlvReader(FILE_NAME);
RtmpMessage m1 = reader.next();
assertEquals(m1.encode(), reader.prev().encode());
assertFalse(reader.hasPrev()); // we are at beginning again
reader.next();
RtmpMessage m2 = reader.next();
assertEquals(m2.encode(), reader.prev().encode());
assertTrue(reader.hasPrev());
reader.close();
}
}