/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.convert.ffmpeg.test; import java.io.FileOutputStream; import java.nio.ByteBuffer; import org.apache.log4j.Logger; import com.ttProject.convert.IConvertListener; import com.ttProject.convert.ffmpeg.FfmpegConvertManager; import com.ttProject.convert.ffmpeg.ProcessHandler; import com.ttProject.nio.channels.FileReadChannel; import com.ttProject.nio.channels.IReadChannel; /** * 動作テスト用 * @author taktod */ public class ConvertTest { private Logger logger = Logger.getLogger(ConvertTest.class); // @Test public void test() throws Exception { // データ元 IReadChannel fc1 = FileReadChannel.openFileReadChannel("http://49.212.39.17/mario.mp4"); // 保存先 final FileOutputStream fos = new FileOutputStream("output.flv"); // 変換マネージャー FfmpegConvertManager manager = new FfmpegConvertManager(); // 変換動作プロセス取得 ProcessHandler handler = manager.getProcessHandler("test"); // 変換出力データの処理 handler.addListener(new IConvertListener() { @Override public void receiveData(ByteBuffer buffer) { try { // 応答をうけとったらファイルに書き出す。 logger.info("応答をうけとりました。"); fos.getChannel().write(buffer); } catch (Exception e) { e.printStackTrace(); } } }); // 処理させる動作コマンド handler.setCommand("/usr/local/bin/avconv -i - -acodec copy -vcodec copy -f flv -"); // 処理開始 manager.start(); ByteBuffer buf; while(true) { // ソースファイルからデータ読み込み buf = ByteBuffer.allocate(65536); fc1.read(buf); buf.flip(); if(buf.remaining() != 0) { // データがある場合は変換プログラムにデータを送る logger.info("流し込む"); manager.applyData(buf); } // 読み込み元ファイルを読み切ったらおわり。 if(fc1.position() == fc1.size()) { break; } } // ちょっと待っとく。 Thread.sleep(2000); // 後処理 fc1.close(); fos.close(); } }