/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.transcode.ffmpeg.flv.test;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Assert;
import com.ttProject.media.Unit;
import com.ttProject.media.flv.FlvHeader;
import com.ttProject.media.flv.ITagAnalyzer;
import com.ttProject.media.flv.Tag;
import com.ttProject.media.flv.TagAnalyzer;
import com.ttProject.nio.channels.FileReadChannel;
import com.ttProject.nio.channels.IFileReadChannel;
import com.ttProject.transcode.IExceptionListener;
import com.ttProject.transcode.ITrackListener;
import com.ttProject.transcode.ffmpeg.FfmpegTranscodeManager;
import com.ttProject.transcode.ffmpeg.IFfmpegTranscodeManager;
import com.ttProject.transcode.ffmpeg.track.FlvAudioUnitSelector;
import com.ttProject.transcode.ffmpeg.track.FlvVideoUnitSelector;
import com.ttProject.transcode.ffmpeg.track.IFfmpegTrackManager;
import com.ttProject.transcode.ffmpeg.unit.FlvDeunitizer;
import com.ttProject.transcode.ffmpeg.unit.FlvUnitizer;
/**
* ファイルをffmpegで変換する動作テスト
* @author taktod
*/
public class FileTranscodeTest {
/** ロガー */
private Logger logger = Logger.getLogger(FileTranscodeTest.class);
/**
* 動作テスト
*/
// @Test
public void test() {
IFileReadChannel source = null;
IFfmpegTranscodeManager transcodeManager = null;
try {
// リモートにあるflvの読み込み準備
source = FileReadChannel.openFileReadChannel("http://49.212.39.17/mario.flv");
FlvHeader flvHeader = new FlvHeader();
flvHeader.analyze(source);
ITagAnalyzer analyzer = new TagAnalyzer();
Tag tag = null;
transcodeManager = new FfmpegTranscodeManager();
logger.info("registerCommandするよん");
transcodeManager.registerCommand("avconv -i - -f flv - 2>avconv.log");
transcodeManager.setExceptionListener(new IExceptionListener() {
@Override
public void exceptionCaught(Exception e) {
logger.error("例外が発生", e);
Assert.fail("例外が発生");
}
});
transcodeManager.setUnitizer(new FlvUnitizer());
transcodeManager.setDeunitizer(new FlvDeunitizer());
// 応答トラックを追加します。
IFfmpegTrackManager trackManager = (IFfmpegTrackManager)transcodeManager.addNewTrackManager();
trackManager.setUnitSelector(new FlvVideoUnitSelector());
trackManager.setTrackListener(new ITrackListener() {
@Override
public void receiveData(List<Unit> units) {
logger.info(units);
}
@Override
public void close() {
logger.info("a終了");
}
});
trackManager = (IFfmpegTrackManager)transcodeManager.addNewTrackManager();
trackManager.setUnitSelector(new FlvAudioUnitSelector());
trackManager.setTrackListener(new ITrackListener() {
@Override
public void receiveData(List<Unit> units) {
logger.info(units);
}
@Override
public void close() {
logger.info("b終了");
}
});
// データを変換マネージャーに流し込んで動作させる。
while((tag = analyzer.analyze(source)) != null) {
// データを送りつける。
transcodeManager.transcode(tag);
}
((FfmpegTranscodeManager)transcodeManager).waitForEnd();
}
catch(Exception e) {
logger.warn("例外が発生した。", e);
}
finally {
if(transcodeManager != null) {
transcodeManager.close();
transcodeManager = null;
}
if(source != null) {
try {
source.close();
}
catch(Exception e) {
}
source = null;
}
}
}
}