【问题标题】:The easiest way to play an audio RTMP stream in Android在 Android 中播放音频 RTMP 流的最简单方法
【发布时间】:2011-09-15 00:52:29
【问题描述】:

我找到了一些 Android RTMP 库(例如:http://rtmpdump.mplayerhq.hu/)。

问题是没有关于我们如何使用它的准确文档。

就我而言,我有一个简单的 RTMP 实时音频流(例如:rtmp://myserver/myapp/myliveaudio)。

在我的 Android 应用中阅读它的最简单方法是什么?

拜托,我不想要链接:我需要一些代码或一些准确的分步说明。

非常感谢。

【问题讨论】:

  • 您好,Rtmp Streaming 做过吗?你能帮我吗?我想在我的应用程序中播放 Rtmp 流媒体..
  • 我也一样,,,,请分享如何使用rtmp进行直播。
  • 好吧,我选择它作为最佳答案而不是答案。事实上,我以另一种方式做到了:我使用了 Flex Mobile。这很容易。但是,“问题”是用户必须安装 Air Runtime。所以,例如,我没有干净的解决方案。
  • 这个问题你解决了吗?

标签: android audio-streaming


【解决方案1】:

不幸的是,这并非易事。现在最好的办法是查看http://code.google.com/p/android-rtmp-client/ 中的代码:特别是查看http://code.google.com/p/android-rtmp-client/source/browse/trunk/example/com/ryong21/example/recorder/RecorderClient.javahttp://code.google.com/p/android-rtmp-client/source/browse/trunk/example/com/ryong21/example/recorder/Recorder.java。这些步骤通过接收流式 MP3 文件并将其内容记录到磁盘上的 FLV 文件。

您将需要修改 RecorderClient.java 文件(特别是在第 193 行附近)以从扬声器播放音频数据。

【讨论】:

  • 感谢您的回答。我确实阅读了代码。但正如我所提到的,我正在尝试播放直播。所以想象一下,如果我创建一个本地文件来缓冲 12 小时的传入流!
  • 您无法缓冲它:您必须将从IoBuffer data = ((IStreamData) rtmpEvent).getData().asReadOnlyBuffer(); 获得的实际数据提供给合适的解码器,该解码器将生成原始音频样本,您可以将其提供给AudioTrack
  • 我很惊讶 Android API 不直接支持播放 RTMP 流。这个答案似乎有道理。我要试一试。
【解决方案2】:

不确定这是否有帮助,但是...我能够使用 Flash 执行类似的操作(rtmp - 流式视频),因此您需要 Android 2.2+。

无论如何,我只是编写了一个显示 Flash 视频的 HTML 页面,然后在 WebView 中打开了该页面。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>

<style type="text/css" media="screen">
    html, body{
        margin:0;
        padding:0;
        height:100%;
    }
    #altContent{
        width:100%;
        height:100%;
    }
</style>
<title>YOUR TITLE HERE!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>

<script type="text/javascript">
    var flashvars = {};

    flashvars.HaloColor = "0x0086db";
    flashvars.ToolTips = "true";
    flashvars.AutoPlay = "true";
    flashvars.VolumeLevel = "50";
    flashvars.CaptionURL = "YOUR CAPTION HERE";
    flashvars.Title = "YOUR TITLE HERE";
    flashvars.Logo = "";
    flashvars.SRC = "rtmp://YOUR STREAM URL HERE";
    flashvars.BufferTime = "5";
    flashvars.AutoHideControls = "false";
    flashvars.IsLive = "true";

    var params = {};
    params.wmode = "transparent";
    params.allowfullscreen = "true";

    var attributes = {};
    attributes.id = "L3MP";

    swfobject.embedSWF("http://media-player.cdn.level3.net/flash/v1_1_1/Level3MediaPlayer.swf", "altContent", "100%", "100%", "10.1.0","http://media-player.cdn.level3.net/flash/v1_1_1/expressInstall.swf", flashvars, params, attributes);
</script>

</head>
<body>
 <div id="altContent">
   <center> <BR><BR><span style="color:red"><b>Please Install Adobe Flash Player</b>  
        </span><BR><BR>
  <a href="http://www.adobe.com/go/getflashplayer"><img     src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a>
  </center>    
  </div>
 </body>
</html>
</script>
</html>

好的...现在只需将其保存在项目的资产文件夹中 并在你的活动中用这样的东西打开它:

    String LocalFile = "file:///android_asset/YOUR_HTML_FILE.htm";

    WebView webView = (WebView) findViewById(R.id.YOUR_WEB_VIEW);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setPluginsEnabled(true);

    webSettings.setLoadWithOverviewMode(true);
    webSettings.setUseWideViewPort(true); 
    webSettings.setAllowFileAccess(true);

    webView.setBackgroundColor(Color.BLACK);
    webView.setVerticalScrollBarEnabled(false);
    webView.setHorizontalScrollBarEnabled(false);
    webView.loadUrl(LocalFile);

它有点解决...希望它对你有用。 CDub。

【讨论】:

  • 嗨,我尝试了您在此处放置的相同代码,但我什么也看不到。当我启动我的应用程序时,应用程序启动后将保持可见 3-4 秒(黑屏的空白活动),然后无任何异常关闭。它在 DDMS 中也没有显示任何异常。你能建议我任何解决方案吗?我真的需要这个。
  • 你好,我试过这个,但它不起作用并且遇到一些问题,所以请你帮我..?
  • 我正在尝试使用解决方法,但它没有播放流。我已经在 SDK 上安装了 flash 播放器,但它说 flash 没有安装!
  • 感谢您的分享。好吧,我能够使用 Flex Mobile 使其工作,它具有一组很好的开箱即用功能,例如读取/发送 rtmp 流。但是,对于这个问题,我仍然想要一个无插件的 Android 解决方案。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多