大家好!
在过去的三个月中,我们一直在进行电话会议项目。 我们认为,使用诸如Flex之类的技术的基于Web的应用程序将是此类要求苛刻的项目的最佳方法。 随着软件的复杂性和电信提供商的需求增加,我们面临的挑战值得注意。 一个挑战是要求从使用我们的软件的代理向其RTSP服务器提供实时视频。 我们面临的问题是, Flex在视频和音频传输中使用了RTMP协议,我们需要快速进行一些重新流处理而又无需重新发明轮子的事情。
在本文中,我们将尝试提供足够的信息来解决一个复杂的问题,即实时流的RTMP到RTSP的重新流传输。 我们的解决方案基于同时支持RTMP和RTSP的 wowza流服务器以及xuggler ,后者在Java应用程序中带来了FFMPEG的强大功能。
Wowza支持将H.264实时流从RTMP转换为RTSP ,但不支持H.263 。 默认情况下,从ActionScript Camera对象捕获的视频是H.263编码的。 我们将提供基于xuggler的代码,该代码可实时将H.263转换为H.264 ,并将H.264流发布到Wowza 。
首先,我们需要设置xuggler 。 我们需要最新版本的FFMPEG和H.264,因此有必要从svn存储库中检出xuggler 。
svn checkout http://xuggle.googlecode.com/svn/trunk/java/xuggle-xuggler xuggle-xuggler
然后我们必须设置一些环境参数。
的Linux
export XUGGLE_HOME=/usr/local/xuggler
export PATH=$XUGGLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$XUGGLE_HOME/lib:$LD_LIBRARY_PATH
苹果电脑
export XUGGLE_HOME=/usr/local/xuggler
export PATH=$XUGGLE_HOME/bin:$PATH
export DYLD_LIBRARY_PATH=$XUGGLE_HOME/lib:$DYLD_LIBRARY_PATH
视窗
- 将XUGGLE_HOME设置为您选择的目录(确保该目录在磁盘上)。 生成时,必须确保XUGGLE_HOME在C:驱动器上,并且在路径中没有空格。 抱歉。 如果使用安装程序,则此限制不适用。
- 添加%XUGGLE_HOME%\ bin ; 到PATH环境变量的开头。
- (可选)将%XUGGLE_REPO%设置到您希望蚂蚁安装已发布的常春藤jar的目录(如果未设置,则默认在构建目录中为dist / ivy)。
然后,我们必须构建并安装xuggler 。
ant run-tests
sudo ant install
现在你已经xuggler安装在$ XUGGLE_HOME
完成安装后,我们必须编写完成此技巧的代码。
package com.javacodegeeks.xuggler;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import com.xuggle.xuggler.Converter;
public class Transcoder {
/**
* @param args
*/
public static void main(String[] args) {
String inputStream = "rtmp://wowzahost/live/streamLive3H.263";
String outputStream = "rtmp://wowzahost/live/streamLive3H.264";
String[] parameters = new String[] { "--acodec", "libfaac", "--vcodec",
"libx264", "--vpreset",
"/usr/local/xuggler/share/ffmpeg/libx264-ultrafast.ffpreset",
inputStream, outputStream };
Converter converter = new Converter();
Options options = converter.defineOptions();
CommandLine cmdLine;
try {
cmdLine = converter.parseOptions(options, parameters);
converter.run(cmdLine);
System.out.println("Finish!!!");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意事项。
- 在$ XUGGLE_HOME / share / ffmpeg目录中,您会找到所有x264可用的预设。更好的质量意味着更多的延迟。 您将必须选择适合您的需求。
- 您将不必更改acodec和vcodec
- FFMPEG的最新版本可以读取和写入RTMP流。
示例项目在此处可用。
感谢您的时间。 希望您会发现本文有趣。
最好的祝福
。/拍
翻译自: https://www.javacodegeeks.com/2010/05/rtmp-to-rtsp-re-stream-using-wowza-and.html