现在我正在使用Red5 Server传输mp3文件,但问题是Flash播放器无法播放某些音频文件。 那么有没有办法将用户上传的每个音频文件转换为使用ffmpeg兼容的flash播放器?
答案 0 :(得分:0)
这样做的一种方法是使用ProcessBuilder并呼叫ffmpeg;请注意,这只会处理已编译的ffmpeg具有编解码器的音频文件。
import java.io.File; import java.io.IOException; public class SimpleTranscoder { public static void transcode(File inputFile) { ProcessBuilder pb = new ProcessBuilder("C:\\ffmpeg\\ffmpeg.exe", "-i", inputFile.getAbsolutePath(), "-acodec", "libmp3lame", "-asamplerate", "44100", "-ab", "32k", "-vn", (inputFile.getParent() + '/' + inputFile.getName() + ".mp3")); pb.redirectErrorStream(true); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line=br.readLine()) != null) { System.out.println(line); } } }
另一种方法是使用Xuggler,但不再维护该项目。
import com.xuggle.xuggler.Converter; import java.io.File; import java.io.IOException; public class SimpleTranscoder { public static void transcode(File inputFile) { Converter converter = new Converter(); // pass options normally used on the command line String[] arguments = { inputFile.getAbsolutePath(), "-acodec", "libmp3lame", "-asamplerate", "44100", "-ab", "32k", "-vn", inputFile.getParent() + '/' + inputFile.getName() + ".mp3" } try { // run the transcoder with the options we provided. converter.run(converter.parseOptions(converter.defineOptions(), arguments)); } catch (Exception e) { e.printStackTrace(); } } }