无法在videoview android中播放来自url的视频

Posted

技术标签:

【中文标题】无法在videoview android中播放来自url的视频【英文标题】:can't play video form url in video view android 【发布时间】:2020-01-20 10:03:23 【问题描述】:

我正在尝试在视频视图中播放来自我自己的本地服务器的视频。我给它我的服务器的 url。

http://admin:admin@192.168.0.3:8732/cam4/ERecordings/4_UNIVIEW_192.168.1.13/01-07-2020/14-39-23.mp4

我可以在任何浏览器中访问此链接并播放视频,但我的应用无法播放。

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       final VideoView videoView = findViewById(R.id.videoplayer);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Buffering please wait!!");
        progressDialog.show();
       // Uri uri = Uri.parse("https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4");
        Uri uri = Uri.parse("http://admin:admin@192.168.0.3:8732/cam4/ERecordings/4_UNIVIEW_192.168.1.13/01-07-2020/14-39-23.mp4");
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(uri);
        //videoView.setVideoPath("http://playready.directtaps.net/smoothstreaming/ISMAAACHE/Taxi3_AACHE.mp4");
        videoView.requestFocus();
        videoView.start();
        try
            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
                @Override
                public void onPrepared(MediaPlayer mp) 
                    progressDialog.dismiss();
                
            );
        
        catch (Exception e)
            Toast.makeText(this,"can not play ", Toast.LENGTH_SHORT).show();
        

    


权限:为了测试,我已授予该应用的所有权限。

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

错误:

W/MediaPlayer: Couldn't open http://admin:admin@192.168.0.3:8732/cam4/ERecordings/4_UNIVIEW_192.168.1.13/01-07-2020/14-39-23.mp4: java.io.FileNotFoundException: No content provider: http://admin:admin@192.168.0.3:8732/cam4/ERecordings/4_UNIVIEW_192.168.1.13/01-07-2020/14-39-23.mp4

我可以从任何浏览器访问它,即使是在移动设备中。甚至 Vlc 和 Mx player android 应用程序都可以播放它。如果我放置任何私人服务器地址,那么它就可以正常播放。我在同一个wifi网络上。

更新:我在我的 android 清单中添加了权限 android:usesCleartextTraffic="true" 但现在我收到错误

E/MediaPlayerNative: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)
D/VideoView: Error: 1,-2147483648

更新 2:- 我将视频文件放在 IIS 服务器中,这次它可以正常工作。但在我的主程序中,我使用的是 apache 服务器。早些时候我使用的是 Libvlc android 集成,它能够播放视频,但 videoview android 无法播放相同的 url。下面的网址工作正常。

String url = "http://192.168.0.4/a1.ts";

【问题讨论】:

尝试在您的 Manifest android:usesCleartextTraffic="true" 中将此属性添加到应用程序中。 我已经这样做了,现在我收到错误 E/MediaPlayerNative: error (1, -2147483648) E/MediaPlayer: Error (1,-2147483648) 您连接的是上传本地视频的同一网络? 因为这个视频进入你的本地服务器 是的,我在连接笔记本电脑的同一个 wifi 上。 【参考方案1】:

试试这个,它会为你工作,

try 
        val link = "https://www.radiantmediaplayer.com/media/bbb-360p.mp4"
        val videoView = findViewById(R.id.videoview) as VideoView
        val mediaController = MediaController(this)
        mediaController.setAnchorView(videoView)
        val progressDialog = ProgressDialog(this)
        progressDialog.setMessage("Loading video please wait!!!")
        progressDialog.show()
        val video = Uri.parse(link)
        videoView.setMediaController(mediaController)
        videoView.setVideoURI(video)
        videoView.requestFocus();
        videoView.start()
        try 
            videoView.setOnPreparedListener(object : MediaPlayer.OnPreparedListener 
                override fun onPrepared(mp: MediaPlayer) 
                    progressDialog.dismiss()
                
            )
         catch (e: Exception) 
            Toast.makeText(this, "can not play ", Toast.LENGTH_SHORT).show()
        


     catch (e: Exception) 
        Toast.makeText(this, "Error loading video", Toast.LENGTH_SHORT).show()
    

AndroidManifest.xml.file 中的权限

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

【讨论】:

谢谢你,我更新了一些你可以检查的信息。 videoView.requestFocus();现在仍然可以正常工作 我已经在代码中加入了这个语句,但它仍然不起作用。我已经添加了第二个更新,请查看它也许您可以提供帮助。 我也可以分享网址 视频网址:radiantmediaplayer.com/media/bbb-360p.mp4

以上是关于无法在videoview android中播放来自url的视频的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Android 中的 VideoView 需要花费太多时间来加载和播放来自 http 链接的视频?

如何在 android 的 videoview 中播放 .mp4 视频?

无法播放视频 VideoView Android 12(错误 (1, -2147483648))

无法在 VideoView 中播放视频 - 为啥?

无法让 Vitamio VideoView 播放普通 Android VideoView 会播放的视频文件

Android:无法使用 videoview 播放视频