我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频
Posted
技术标签:
【中文标题】我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频【英文标题】:I want a simple code to play video from rtmp stream for my android application project 【发布时间】:2012-09-12 11:15:32 【问题描述】:我有关于通过 android TV Box 进行视频点播的项目。我有问题,我找不到 RTMP 播放器的开源。有没有人可以帮助我或指导我有关 rtmp 播放器源代码的信息?
我使用 red5 为 android 2.2(froyo) 流式传输和构建。
【问题讨论】:
我的android应用程序如何连接到android播放器以及android播放器如何连接到流媒体服务器?非常感谢。@droidhot 您可以使用启用了 javascript 和 flashplayer 支持的 webview 来使用 RTMP 播放 非常感谢。我今晚会试试看。@droidhot @R_Hear 你应该和我们分享你的源代码吗.. 【参考方案1】:使用 RTSP
public class PlayVideoRemote extends Activity
private VideoView vView;
private String vSource;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
//sets the Bundle
super.onCreate(savedInstanceState);
//sets the context
setContentView(R.layout.main);
//get the VideoView from the layout file
vView = (VideoView)findViewById(R.id.vview);
//use this to get touch events
vView.requestFocus();
//loads video from remote server
//set the video path
vSource ="rtsp://v6.cache1.c.youtube.com/CjYLENy73wIaLQnF4qJzpSt4nhMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYMDFmvL1wMysTQw=/0/0/0/video.3gp";
//set the video URI, passing the vSource as a URI
vView.setVideoURI(Uri.parse(vSource));
//enable this if you want to enable video controllers, such as pause and forward
vView.setMediaController(new MediaController(this));
//plays the movie
vView.start();
RTMP 参考这个Convert video Input Stream to RTMP
【讨论】:
谢谢。但它不能播放视频。我用red5串流,只能在rtmp上串流。 这是关于使用 rtmp 而不是 rtsp @SudiptaforAndroid...该代码现在是否正常工作,因为我收到“无法加载插件”【参考方案2】:rtmp 实时流可以在嵌入 Flash 播放器的 Android webview 中播放。下面给出播放rtmp的完整源代码。
虽然你必须通过这个网址 http://www.adobe.com/devnet-apps/flashruntimes/certified-devices.html 这里列出了支持闪存的设备。所以在这样一个支持闪存的设备上测试代码。
public class WebViewPlayer extends Activity
WebView webView;
Utils utils;
String bodyHtml;
String rtmpUrl;
String fileName;
String htmlVideoEmbedCode ;
String htmlPost = "</body></html>";
String htmlPre = "<!DOCTYPE html>"
+ "<html lang=\"en\">"
+ "<head><meta charset=\"utf-8\">"
+ "</head>"
+ "<body style='margin:0; pading:0;"
+ " background-color: #71D5CA;'>";
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.flash_player);
RegisterActivities.registerActivity(this);
utils = new Utils(this);
if(! utils.isConnectionPossible())
utils.getMessageDialogBox("Alert", "The Device cannot connect to the internet."
+ "Please make sure internet is available.", "OK",
true)
.show();
rtmpUrl = YOUR_RTMP_URL);
fileName = YOUR_FILE_NAME);
htmlVideoEmbedCode = getVideoEmbedCode();
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setAppCacheEnabled(true);
webView.setWebChromeClient(new WebChromeClient()
public void onProgressChanged(WebView view, int progress)
if(progress == 100)
((ProgressBar)findViewById(R.id.progressBarWebView))
.setVisibility(View.INVISIBLE);
);
refreshFileName();
@Override
protected void onResume()
super.onResume();
webView.refreshPlugins(true);
private String getVideoEmbedCode()
return "<embed "
+ "type=\"application/x-shockwave-flash\""
+ "id=\"player1\" " + "name=\"player1\" "
+ "src=\"http://www.c-span.org/"
+ "cspanVideoHD.swf\""
+ "width=\""+utils.getDisplayWidth()+"\""
+ "height=\""+(utils.getDisplayHeight()+40)+"\"" + " flashvars=@FILESRC@"
+ "allowfullscreen=\"true\""
+ "allowscripaccess=\"always\""
+ "/>";
private void refreshFileName()
if (fileName.endsWith(".flv"))
fileName = "flv:" + fileName;
bodyHtml = htmlVideoEmbedCode ;
bodyHtml = bodyHtml.replaceAll("@FILESRC@",
"\"file=" + fileName
+ "&streamer=" + rtmpUrl + "\"");
webView.loadDataWithBaseURL("http://127.0.0.1",
htmlPre + bodyHtml
+ htmlPost, "text/html", "UTF-8", null);
@Override
protected void onDestroy()
// TODO Auto-generated method stub
super.onDestroy();
webView.stopLoading();
webView.destroy();
// webView = null;
【讨论】:
非常感谢,但我在 -Utils utils 上遇到错误; -RegisterActivity.registerActivity(this); - + "width=\""+utils.getDisplayWidth()+"\"" + "height=\""+(utils.getDisplayHeight()+40)+"\"" +" flashvars=@FILESRC@" 错误在 utils 上我怎么能弄明白。 utils 是用户定义类的对象,其中定义了 getDisplayHeight()/Width()...所以您只需忽略这些方法..您可以改为放置任何高度或宽度.. 非常感谢。 ^_^ @SudiptaforAndroid 如何用这个播放实时 rtmp 流?我尝试了每一种组合,但它只是播放 C-span 中的一些东西......有人可以帮助我吗? :) 这里的 Utils 是什么? RegisterActivities abd Utils 给我错误.. 我需要一些外部库吗??以上是关于我想要一个简单的代码来为我的 android 应用程序项目播放 rtmp 流中的视频的主要内容,如果未能解决你的问题,请参考以下文章