使用wowza和xuggler將RTMP轉換為RTSP

注意:這是我們的“ Xuggler開發教程 ”系列的一部分。

大家好!

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

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/374901.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/374901.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/374901.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    如何設置網頁標題圖標

    1、先制作一個名為favicon.ico的小圖標&#xff0c;并將其放到網站根目錄下 2、在html頁面<head></head>標簽內加入&#xff1a; <link rel"shortcut icon" href"favicon.ico" />OK轉載于:https://www.cnblogs.com/moshengr/p/4600281.h…

    C語言pow函數的精度問題

    &#xff08;1&#xff09;pow函數返回值是double類型 &#xff08;2&#xff09;pow原型 double pow(double x,double y); (3)sqrt原型 double sqrt(double x); 當輸出時函數值賦給整型就會出錯&#xff1a; int main()d {int N 1;scanf("%d",&N);for(int i …

    習題2-1 求整數均值 (10 分)

    吐槽一下&#xff0c;因為少打了一個空格&#xff0c;PTA上老是不給我過&#xff0c;還一直報結果錯誤&#xff0c;誤導我好久&#xff0c;即使是吹毛求疵&#xff0c;也應該提示我格式錯誤吧&#xff01;&#xff01; 原題&#xff1a; 本題要求編寫程序&#xff0c;計算4個整…

    iframe高度自適應,終于解決了

    一直被iframe的高度自適應的問題困擾著&#xff0c;在項目中也是多次遇到。網上也有不少相關的代碼&#xff0c;但是總不能滿足自己的要求。在頭痛了幾次之后終于下定決心解決這個問題。 本代碼主要解決的問題是&#xff1a;最外層滾動條隨著iframe高度動態變化的問題。如果ifr…

    在領域驅動的設計,貧乏的領域模型,代碼生成,依賴項注入等方面……

    埃里克埃文斯&#xff08;Eric Evans&#xff09;已制定了什么是域驅動設計&#xff08;DDD&#xff09;。 Martin Fowler是DDD的大力支持者和擁護者。 這些都是非凡的名字&#xff0c;幾乎可以肯定的是&#xff0c;他們正在支持一些有價值的東西。 我不是在這里對此爭論。 也許…

    Javascript模塊化工具require.js教程

    轉自&#xff1a;http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html, http://www.w3cschool.cc/w3cnote/requirejs-tutorial-2.html 隨著網站功能逐漸豐富&#xff0c;網頁中的js也變得越來越復雜和臃腫&#xff0c;原有通過script標簽來導入一個個的js文件這種方式已…

    數據值、列類型和數據字段屬性

    數據值&#xff1a;數值型、字符型、日期型和空值等。數據列類型 2.1 數值類的數據列類型2.2 字符串類數據列類型 2.3 日期和時間型數據數據列類型 另外&#xff0c;也可以使用整形列類型存儲UNIX時間戳&#xff0c;代替日期和時間列類型&#xff0c;這是基于PHP的web項目中常…

    全文搜索Apache Lucene簡介

    在本教程中&#xff0c;我想談談Apache Lucene 。 Lucene是一個開源項目&#xff0c;提供基于Java的索引和搜索技術。 使用其API&#xff0c;很容易實現全文搜索 。 我將處理Lucene Java版本 &#xff0c;但請記住&#xff0c;還有一個名為Lucene.NET的.NET端口&#xff0c;以及…

    函數scanf

    本節介紹輸入函數 scanf 的用法。scanf 和 printf 一樣&#xff0c;非常重要&#xff0c;而且用得非常多&#xff0c;所以一定要掌握。 概述 scanf 的功能用一句話來概括就是“通過鍵盤給程序中的變量賦值”。該函數的原型為&#xff1a; # include <stdio.h> int scanf(…

    C語言中定義變量位置

    C標準的問題 C89規定&#xff0c;在任何執行語句之前&#xff0c;在塊的開頭聲明所有局部變量。 即應該如下&#xff1a;定義變量只能在最開始&#xff0c;scanf等執行語句之前 int N 0;double sum 0;scanf("%d",&N);在C99以及C中則沒有這個限制&#xff0c;即…

    Java中的低GC:使用原語而不是包裝器

    總覽 有兩個很好的理由在可能的地方使用原語而不是包裝器。 明晰。 通過使用原語&#xff0c;您可以清楚地知道null值是不合適的。 性能。 使用原語通常更快。 清晰度通常比性能更重要&#xff0c;并且是使用它們的最佳理由。 但是&#xff0c;本文討論了使用包裝程序對性能…

    C# 連接Oracle數據庫以及一些簡單的操作

    拖了很久今天終于在博客園寫了自己第一篇隨筆&#xff1a; 話不多說&#xff0c;我們直接進入正題&#xff1a; 1.連接數據庫 using (OracleConnection conn new OracleConnection("data source192.168.97.60/orcl;User Idabc;Passwordabc;")) { …

    markdownb編輯器

    這是H1 這是H2 這是H3 這是一個標題。 這是第一行列表項。這是第二行列表項。給出一些例子代碼&#xff1a; return shell_exec("echo $input | $markdown_script"); 轉載于:https://www.cnblogs.com/xcl461330197/p/4605163.html

    Java Secret:使用枚舉構建狀態機

    總覽 Java中的枚舉比許多其他語言更強大&#xff0c;這可能導致令人驚訝的用途。 在本文中&#xff0c;我概述了Java 枚舉的一些單獨功能&#xff0c;并將它們組合在一起形成一個狀態機。 單例和實用程序類的枚舉 您可以非常簡單地將枚舉用作Singleton或Utility。 enum Si…

    數組部分筆記

    對于數組的初始化需要注意以下幾點&#xff1a; 可以只給部分元素賦值。當{ }中值的個數少于元素個數時&#xff0c;只給前面部分元素賦值。例如&#xff1a; int a[10]{12, 19, 22 , 993, 344};表示只給 a[0]~a[4] 5個元素賦值&#xff0c;而后面 5 個元素自動初始化為 0。 …

    指向函數的指針

    指向函數的指針變量的一般形式為&#xff1a;數據類型 &#xff08;*指針變量名&#xff09;&#xff08;函數參數表列&#xff09;&#xff1b;如&#xff1a; int (*p)(int ,int );1、int (*p)(int ,int );表示定義一個指向函數的指針變量p&#xff0c;它不是固定只能指向…

    核心Java面試答案不正確

    總覽 在Internet上&#xff0c;Java面試問題和答案從一個網站復制到另一個網站。 這可能意味著錯誤或過時的答案可能永遠不會得到糾正。 這是一些不太正確或已經過時的問題和答案。 即是Java 5.0之前的版本。 每個提供的問題后都有兩個部分。 斜體的第一部分指示答案不完整/錯…

    138.括號序列(區間型DP)

    3657 括號序列 時間限制: 1 s空間限制: 256000 KB題目等級 : 黃金 Gold題解查看運行結果題目描述 Description我們用以下規則定義一個合法的括號序列&#xff1a; &#xff08;1&#xff09;空序列是合法的 &#xff08;2&#xff09;假如S是一個合法的序列&#xff0c;則 (S) …

    C# 執行批處理文件(*.bat)的方法代碼

    代碼如下:static void Main(string[] args){Process proc null;try{ string targetDir string.Format("D:\adapters\setup");//this is where mybatch.bat liesproc new Process();proc.StartInfo.WorkingDirectory targetDir;proc.StartInfo.Fil…

    C語言空格怎么表示

    1.直接敲空格就行&#xff0c;或者使用ASCII碼值賦值為32。 空格沒有轉義字符。 printf("12%c45 58",32);輸出 12 45 582.合法轉義字符如下&#xff1a;\a 響鈴(BEL) 、\b 退格(BS)、\f 換頁(FF)、\n 換行(LF)、\r 回車(CR)、\t 水平制表(HT)、\v 垂直制表(VT) 0、…