大家好!
在過去的三個月中,我們一直在進行電話會議項目。 我們認為,使用諸如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 blocke.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