在桌面计算机上的Google Chrome浏览器中,我可以使用以下链接流式传输驻留在我的服务器上的mp4视频文件:
file://192.168.0.1/Videos/video.mp4
我想在Android应用程序中执行相同的操作但是当我尝试将此相同的链接放入VideoView或WebView时,它会遇到错误。
在VideoView中,它会给出一个错误,说它无法播放此文件,而在WebView中则会出现文件权限错误。
我使用的VideoView代码是:
// Declare variables
ProgressDialog pDialog;
VideoView videoview;
// Insert your Video URL
String VideoURL = "file://192.168.0.1/Videos/video.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the layout from video_main.xml
setContentView(R.layout.videoview_main);
// Find your VideoView in your video_main.xml layout
videoview = (VideoView) findViewById(R.id.VideoView);
// Execute StreamVideo AsyncTask
// Create a progressbar
pDialog = new ProgressDialog(VideoViewActivity.this);
// Set progressbar title
pDialog.setTitle("Android Video Streaming Tutorial");
// Set progressbar message
pDialog.setMessage("Buffering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
// Show progressbar
pDialog.show();
try {
// Start the MediaController
MediaController mediacontroller = new MediaController(
VideoViewActivity.this);
mediacontroller.setAnchorView(videoview);
// Get the URL from String VideoURL
Uri video = Uri.parse(VideoURL);
videoview.setMediaController(mediacontroller);
videoview.setVideoURI(video);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
videoview.requestFocus();
videoview.setOnPreparedListener(new OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
pDialog.dismiss();
videoview.start();
}
});
}
WebView代码是:
WebView webview = (WebView) findViewById(R.id.webView1);
webview.setWebViewClient(new WebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setPluginState(WebSettings.PluginState.ON);
webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
webview.setWebChromeClient(new WebChromeClient());
webview.loadUrl("file://192.168.0.1/Videos/video.mp4");
VideoView或WebView中文件协议的链接格式是否不同导致此操作不起作用或是否是另一个问题?
我猜你正在使用Windows或Linux机器作为服务器。如果您希望VideoView正常工作,则必须实施Android支持的视频流格式。
只是为了说清楚file://
URI方案没有指定网络协议和“SMB / CIFS”,Windows本机和Linux与SAMBA服务器用于文件共享不是Android本机。
来自:https://tools.ietf.org/id/draft-kerwin-file-scheme-07.html#rfc.section.3.4
最后一段是重要的:
'文件'URI方案很不寻常,因为它没有为共享文件指定Internet协议或访问方法;因此,它在主机之间的网络协议中的效用是有限的。定义此类访问方法的文件服务器协议示例包括SMB / CIFS [MS-SMB2],NFS [RFC3530]和NCP [NOVELL]。
对于可行的解决方案:我建议为您的服务器搜索http / https视频流。
该视频应采用Android支持的格式。您可以找到支持的视频格式here。
file://
也不是URL,它表示文件系统。您必须提供一个以http
或https
开头的网址。
当您将计算机用作服务器时,请确保您的Android设备和计算机位于同一网络中。否则Android设备将无法找到您的视频。