System.err:java.io.FileNotFoundException:WAOSA_URL:打开失败:ENOENT(没有这样的文件或目录)-视频文件
Posted
技术标签:
【中文标题】System.err:java.io.FileNotFoundException:WAOSA_URL:打开失败:ENOENT(没有这样的文件或目录)-视频文件【英文标题】:System.err: java.io.FileNotFoundException: WAOSA_URL: open failed: ENOENT (No such file or directory) - video files 【发布时间】:2021-06-21 17:54:10 【问题描述】:本质上,这是一个由开发团队创建的应用程序,我只是想让该应用程序在最新的 android SDK(目标 30)上运行。在这一点上,我对 Android Studio 和移动开发仍然很陌生,所以我只是想让应用程序恢复使用所有功能,即使 API 已被弃用并且需要尽快升级。一旦它启动并运行,我就可以处理已弃用的方面。我也可以暂时将目标 SDK 降低到 28 或 29 之类的东西。
当我在应用程序上播放视频时引发错误。视频在那里,缩略图显示没有问题,但它们不播放。该应用程序在尝试播放时会在播放器上显示"something error"
。该应用程序不会崩溃或离开屏幕。它只是不断尝试播放视频,直到用户退出页面。
非常感谢任何帮助或建议。如果我遗漏了我应该添加到帖子中的任何代码,请告诉我。
错误如下:
W/System.err: java.io.FileNotFoundException: WAOSA_URL: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1182)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1076)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1097)
at tv.danmaku.ijk.media.player.AndroidMediaPlayer.setDataSource(AndroidMediaPlayer.java:94)
at tcking.github.com.giraffeplayer2.GiraffePlayer.init(GiraffePlayer.java:421)
at tcking.github.com.giraffeplayer2.GiraffePlayer.access$600(GiraffePlayer.java:54)
at tcking.github.com.giraffeplayer2.GiraffePlayer$1.handleMessage(GiraffePlayer.java:222)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:214)
W/MediaPlayer: Couldn't open WAOSA_URL
java.io.FileNotFoundException: No content provider: WAOSA_URL
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1097)
at tv.danmaku.ijk.media.player.AndroidMediaPlayer.setDataSource(AndroidMediaPlayer.java:94)
at tcking.github.com.giraffeplayer2.GiraffePlayer.init(GiraffePlayer.java:421)
at tcking.github.com.giraffeplayer2.GiraffePlayer.access$600(GiraffePlayer.java:54)
at tcking.github.com.giraffeplayer2.GiraffePlayer$1.handleMessage(GiraffePlayer.java:222)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
V/MediaPlayer: resetDrmState: mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
cleanDrmObj: mDrmObj=null mDrmSessionId=null
W/MediaPlayer: Use of stream types is deprecated for operations other than volume control
W/MediaPlayer: See the documentation of setAudiostreamType() for what to use instead with android.media.AudioAttributes to qualify your playback use case
Use of stream types is deprecated for operations other than volume control
See the documentation of setAudioStreamType() for what to use instead with android.media.AudioAttributes to qualify your playback use case
Build.gradle(应用程序):
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
buildscript
repositories
google()
mavenCentral()
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:4.2.1'
classpath 'com.google.gms:google-services:4.3.8'
classpath 'com.android.tools.build:gradle:3.5.4'
android
packagingOptions
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.'
compileSdkVersion 30
defaultConfig
applicationId "//removed for privacy"
minSdkVersion 21
targetSdkVersion 30
versionCode 3
versionName '3.1'
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
useLibrary 'org.apache.http.legacy'
compileOptions
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
ndkVersion '20.0.5594570'
repositories
flatDir
dirs 'libs'
mavenCentral()
maven
url 'https://maven.google.com'
jcenter()
google()
dependencies
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.viewpager:viewpager:1.0.0'
implementation 'androidx.navigation:navigation-runtime:2.4.0-alpha02'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.drawerlayout:drawerlayout:1.1.1'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:compose-theme-adapter:1.0.0-beta08'
implementation 'com.google.android.material:material:1.3.0'
implementation 'com.google.android.material:material:1.4.0-rc01'
implementation 'commons-io:commons-io:20030203.000550'
implementation group: 'com.bikomobile', name: 'multipart', version: '1.3.4'
// The GoCoder SDK library dependency declaration
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'me.relex:circleindicator:2.1.6@aar'
implementation 'com.intuit.sdp:sdp-android:1.0.6'
implementation 'com.reginald:editspinner:1.0.0'
implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
implementation 'com.github.tcking:viewquery:1.6'
implementation group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'
implementation 'com.android.volley:volley:1.2.0'
implementation 'com.google.code.gson:gson:2.8.7'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.google.firebase:firebase-config:21.0.0'
implementation 'com.google.firebase:firebase-dynamic-links:20.1.0'
implementation 'joda-time:joda-time:2.10.10'
implementation 'com.github.dynckathline:danmaku:1.0'
implementation files('libs/apache-mime4j-0.6.jar')
implementation files('libs/httpmime-4.0.1.jar')
implementation 'com.github.tcking:giraffeplayer2:0.1.25'
implementation 'com.mikhaellopez:circularimageview:4.3.0'
implementation group: 'com.github.tcking', name: 'ijkplayer-x86_64', version: '0.8.8'
api 'com.github.tcking:giraffeplayer2:0.1.25'
api 'com.github.tcking:giraffeplayer2:0.1.25-lazyLoad'
api 'com.github.tcking:giraffeplayer2:0.1.25-full'
api 'com.github.tcking:ijkplayer-arm64:0.8.8-full' //support arm64
api 'com.github.tcking:ijkplayer-armv5:0.8.8-full' //support armv5
api 'com.github.tcking:ijkplayer-x86:0.8.8-full' //support x86
api 'com.github.tcking:ijkplayer-x86_64:0.8.8-full' //support x86_64
apply plugin: 'com.google.gms.google-services'
类 ActivityStreamVideo:
package com.ccgo.utility;
/*
This class is used to stream online video
*/
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;
import com.ccgo.R;
import com.ccgo.utility.AppConstant;
import com.ccgo.utility.Utility;
public class ActivityStreamVideo extends Activity
// Declare variables
ProgressDialog pDialog;
VideoView videoview;
private String VIDEO_ID="";
// Insert your Video URL
String VideoURL = "";
private PreferenceManager pref;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// Get the layout from video_main.xml
pref = new PreferenceManager(this);
if(pref.getThemeId()== AppConstant.THEME_GREEN)
setContentView(R.layout.activity_stream_video);
else
setContentView(R.layout.activity_stream_video_red);
// Find your VideoView in your video_main.xml layout
videoview = findViewById(R.id.VideoView);
// Execute StreamVideo AsyncTask
//Getting Intent Data
getIntentData();
// Create a progressbar
pDialog = new ProgressDialog(ActivityStreamVideo.this);
// Set progressbar title
pDialog.setTitle("Please wait");
// Set progressbar message
pDialog.setMessage("Buffering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
// Show progressbar
pDialog.show();
try
// Start the MediaController
MediaController mediacontroller = new MediaController(
ActivityStreamVideo.this);
mediacontroller.setAnchorView(videoview);
// Get the URL from String VideoURL
Uri video = Uri.parse("//removed for privacy");
Log.d("UPLOAD",video.toString());
if(!video.toString().equals("") || video!=null)
videoview.setMediaController(mediacontroller);
videoview.setVideoURI(video);
else
Utility.displayToast(ActivityStreamVideo.this,getString(R.string.video_not_found));
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();
);
//Method to get intent data
private void getIntentData()
try
VIDEO_ID = getIntent().getStringExtra("VIDEO_ID");
catch(NullPointerException e)
e.printStackTrace();
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.ccgo">
<!--<uses-feature android:name="android.hardware.camera" />-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACTION_MANAGE_STORAGE" />
<uses-permission android:name="android.permission.DEFAULT_SCOPED_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--<uses-feature android:name="android.hardware.camera.autofocus" />-->
<!--<permission android:name="android.permission.FLASHLIGHT" />-->
<!--<uses-feature android:name="android.hardware.camera2.full" />-->
<!--<uses-feature-->
<!--android:name="android.hardware.camera.front"-->
<!--android:required="false" />-->
<application
android:name=".utility.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--tools:replace="android:appComponentFactory">-->
<activity
android:name=".login.activity.SplashActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".login.activity.ActivityForgotPassword"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".coach.activity.ActivityRecordVideo"
android:label="@string/title_activity_add_challenge"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".company_admin.activity.ActivityViewLicenseInformation"
android:label="@string/title_activity_add_challenge"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".company_admin.activity.ActivityManageNotification"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".ActivityManageTheme"
android:label="@string/manage_theme"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".coach.activity.ActivityCreateChallengeSubmission"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".company_admin.activity.ActivityAddVote"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".coach.activity.ActivityCreateChallenge"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".coach.activity.ActivityPreviewVideo"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".coach.activity.ActivityPreviewDescription"
android:label="@string/title_activity_add_challenge"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".login.activity.ActivityLogin"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden">
<!--dynamicLink intent filter starts-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="//removed for privacy"
android:scheme="http" />
<data
android:host="//removed for privacy"
android:scheme="https" />
<!--dynamicLink intent filter ends-->
</intent-filter>
</activity>
<activity
android:name=".HomeActivity"
android:label="@string/title_activity_main"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".company_admin.activity.ActivityOngoingChallengesDetail"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:screenOrientation="sensor"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".company_admin.activity.ActivityEditChallenge"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="sensor"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".company_admin.activity.ActivityResponseDetail"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:screenOrientation="sensor"
android:theme="@style/AppTheme.StatusBar.Light"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".company_admin.activity.ActivityViewLeaderBoard"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".coach.activity.ActivityViewTeamLeaderBoardCaoch"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".company_admin.activity.ActivityManageLibraryDetail"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="sensor"
android:theme="@style/AppTheme.NoActionBar" />
<receiver
android:name=".utility.ConnectivityReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<activity
android:name=".SampleActivity"
android:label="@string/title_activity_sample"
android:theme="@style/AppTheme.NoActionBar" />
<!-- Firebase Notifications -->
<!-- <service android:name=".notification.MyFireBaseIntanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service> -->
<service android:name=".notification.MyFireBaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name=".company_admin.activity.ViewTeamActivity"
android:label="Select Team"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.StatusBar.Light" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.ccgo.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/external_files" />
</provider>
<activity android:name=".company_admin.activity.ActivityManageLibraryResponse" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
如果我尝试在应用的不同区域播放视频,则会出现以下错误:
W/MediaPlayer: Couldn't open WAOSA_URL
java.io.FileNotFoundException: No content provider: WAOSA_URL
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1097)
at android.widget.VideoView.openVideo(VideoView.java:412)
at android.widget.VideoView.access$2200(VideoView.java:83)
at android.widget.VideoView$7.surfaceCreated(VideoView.java:694)
at android.view.SurfaceView.updateSurface(SurfaceView.java:758)
at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:155)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2745)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:790)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
【问题讨论】:
【参考方案1】:您面临的问题可能是由于在您将 gradle 文件升级到 targetSdkVersion
of 30 后,您的应用必须遵守新的文件访问限制。
虽然 Google 的文档不是很好,但这是我能找到的了解更多信息的最佳信息:
https://support.google.com/googleplay/android-developer/answer/10467955(请务必展开本页底部的部分)
https://www.reddit.com/r/androiddev/comments/mwaqn1/scoped_storage_recap/(这个更侧重于作用域存储,但仍然很有帮助)
【讨论】:
以上是关于System.err:java.io.FileNotFoundException:WAOSA_URL:打开失败:ENOENT(没有这样的文件或目录)-视频文件的主要内容,如果未能解决你的问题,请参考以下文章
System.out.println 和 System.err.println 乱序
System.out.println()和System.err.println()