需要在我的 Red5 服务器上将视频转换为 flv。这方面的任何帮助都会非常有帮助。
4 回答
我在我的 Ubuntu 机器上使用 ffmpeg,效果很好。
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
要创建静态文件,请使用 ffmpeg(在 Ubuntu 上也称为 avconv):
ffmpeg -i /pathto/inputfile.xxx /pathto/outputfile.flv其中“xxx”是输入文件的扩展名,例如 .avi、.mp4 等。
要使用 RED5 从输入流(例如来自捕获设备)创建实时输出流以进行实时广播,请在管道中使用 ffmpeg,如下所示:
输入流 > - | ffmpeg -f xxx -i -f flv rtmp://your.red5.server:1935/live/mybroadcast
其中 xxx 是您对输入流的视频格式的最佳猜测。根据格式,例如 'rawvideo' - 您可能需要一些额外的转换选项和/或单独处理音频流(第二个 -i 选项)。
要接收 RED5 广播,请将浏览器的 flash 播放器连接到与 ffmpeg 的输出相同的路径,这与 RED5 流的输入相同,与 RED5 流的输出相同(是的,rtmp 非常那样有效):
rtmp://your.red5.server:1935/live/mybroadcast
我建议使用 Xuggler ( http://www.xuggle.com ) 来完成这项工作,这是一个可以添加到 Red5 应用程序的示例方法:
public void convert(String sourceFilePath, String destinationFilePath) {
//assumes the following: sourceFilePath is input file and destinationFilePath is output file
IMediaReader reader = ToolFactory.makeReader(sourceFilePath);
IMediaWriter writer = ToolFactory.makeWriter(destinationFilePath, reader);
writer.open();
writer.setForceInterleave(true);
IContainerFormat outFormat = IContainerFormat.make();
outFormat.setOutputFormat("flv", destinationFilePath, null);
IContainer container = writer.getContainer();
container.open(args[1], IContainer.Type.WRITE, outFormat);
writer.addVideoStream(0, 0, ICodec.findEncodingCodecByName("flv"), 320, 240);
writer.addAudioStream(1, 0, ICodec.findEncodingCodecByName("libmp3lame"), 2, 44100);
reader.addListener(writer);
while (reader.readPacket() == null);
}
您提到“mpeg”,但此代码块将转换 FFMpeg 和 Xuggler 支持的任何媒体类型。
Dan Fernandez在 Coding4Fun 上创建了一个项目,它使用 FFMPEG 将 flv 转换为 mpeg,反之亦然。
这是他创建的名为InnerTube的项目
这是一个站点的链接,该站点详细说明了FFMPEG的命令行参数。