Я хочу воспроизвести видео с использованием textureview..но во время работы приложения оно останавливается, и я сталкиваюсь со следующей ошибкой. Я не знаю, что делать, я много пробовал и трачу почти 8 часов на решение этой проблемы .. но я не могу .. пожалуйста, помогите мне избавиться от этого ..
java.lang.NoSuchMethodError: No virtual method setDataSource(Landroid/content/res/AssetFileDescriptor;)V in class Landroid/media/MediaPlayer; or its super classes (declaration of 'android.media.MediaPlayer' appears in /system/framework/framework.jar)
at com.vcube.textureview.MainActivity.onSurfaceTextureAvailable(MainActivity.java:42)
at android.view.TextureView.getHardwareLayer(TextureView.java:370)
at android.view.View.updateDisplayListIfDirty(View.java:14170)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.updateDisplayListIfDirty(View.java:14188)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.updateDisplayListIfDirty(View.java:14188)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.updateDisplayListIfDirty(View.java:14188)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.updateDisplayListIfDirty(View.java:14188)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.updateDisplayListIfDirty(View.java:14188)
at android.view.View.getDisplayList(View.java:14215)
at android.view.View.draw(View.java:14985)
at android.view.ViewGroup.drawChild(ViewGroup.java:3431)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3224)
at android.view.View.draw(View.java:15260)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2731)
at android.view.View.updateDisplayListIfDirty(View.java:14193)
at android.view.View.getDisplayList(View.java:14215)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2628)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2444)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2074)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1116)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6098)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:773)
at android.view.Choreographer.doCallbacks(Choreographer.java:586)
at android.view.Choreographer.doFrame(Choreographer.java:556)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:759)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:159)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
Я включил видео в папку активов .. Я не знаю, где я не прав ..
Ниже приводится java код, который я использовал.
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.AssetFileDescriptor;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.view.Surface;
import android.view.TextureView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener {
private TextureView textureview;
private MediaPlayer mediaPlayer;
private AssetFileDescriptor fileDescriptor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textureview = (TextureView) findViewById(R.id.textureView);
textureview.setSurfaceTextureListener(this);
mediaPlayer = new MediaPlayer();
try {
fileDescriptor = getAssets().openFd("random.mp4");
} catch (Exception e) {
e.printStackTrace();
}
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface surfaceTexture = new Surface(surface);
try {
mediaPlayer.setDataSource(fileDescriptor);
mediaPlayer.setSurface(surfaceTexture);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
@Override
protected void onPause() {
if(mediaPlayer!=null && mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
if(mediaPlayer!=null){
mediaPlayer.start();
}
}
@Override
protected void onDestroy() {
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer =null;
}
super.onDestroy();
}
}
Можете ли вы предложить мне любое решение, пожалуйста? Спасибо