在不使用 Flash 的情况下在 WebView Android 中播放 RTMP

Play RTMP in WebView Android without using Flash

我正在尝试在 Android 中播放 RTMP 流。我要求 this question 不使用 WebView 播放它,但似乎没有人能够帮助我。所以,我正在尝试使用 WebView 播放它。但是,由于它需要 Flash 播放器,并且 Android 设备不再支持 Flash,因此我无法复制它。

我有这个:

videostream.html:

<!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 = "https://player.cdnmedia.tv/embed/a77aa67c";
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/videostream.html";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.stream2_layout);
    WebView webView = findViewById(R.id.surface);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setPluginState(WebSettings.PluginState.ON);
    //webSettings.plug
    //webSettings.setPluginsEnabled(true);

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

    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    webView.setBackgroundColor(Color.BLACK);
    webView.setVerticalScrollBarEnabled(false);
    webView.setHorizontalScrollBarEnabled(false);
    webView.loadUrl(LocalFile);
}

stream2_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<WebView
    android:id="@+id/surface"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_alignParentTop="true"/>

</RelativeLayout>

我的 iOS 开发人员可以玩了。而且,由于 iOS 设备也不支持 Flash,我假设 iOS 中的播放器正在使用 HTML5.

如何播放此流?

正如你所发现的,web视图不能播放RTMP。没有例外,没有解决方法。视频需要采用可以在网络视图中播放的格式,例如 hls(通过 hls.js)或破折号。