使用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.mzph.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、…