Воспроизвести видео через URL с MediaPlayer не работает на Android 9 - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь воспроизвести видео через URL, оно работает на Android <9 </p>

, но на Android 9 не работает

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
                MediaPlayer mediaPlayer = new MediaPlayer();
                mediaPlayer.setDataSource(videoPath);
                mediaPlayer.prepareAsync();
                mediaPlayer.setLooping(false);
                mediaPlayer.setSurface(new Surface(surfaceTexture));
                mediaPlayer.setOnPreparedListener(MediaPlayer::start);
}  

ОБНОВЛЕНИЕ:

Я пытаюсь воспроизвести видео через прямой URL, он работает на Android <9 </p>

, но на Android 9 не работает, этот код работал до того, как вышел Android 9, он работал хорошо, но с Android 9 нетработает больше

это полный класс:

public class FeatureFragment extends Fragment implements TextureView.SurfaceTextureListener {


    TextureView surfaceView;
    private String videoPath = "direct url.mp4";


    public static Fragment newInstance() {
        return new FeatureFragment();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.feature_fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        surfaceView = view.findViewById(R.id.videoView1);
        surfaceView.setSurfaceTextureListener(this);
    }


    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
        try {
            MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(videoPath);
            mediaPlayer.prepareAsync();
            mediaPlayer.setLooping(false);
            mediaPlayer.setSurface(new Surface(surfaceTexture));
            mediaPlayer.setOnPreparedListener(MediaPlayer::start);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {

    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        surfaceTexture = null;
        videoPath = null;
        return false;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {

    }
}

и вот макет, который содержит только TextureView

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


        <TextureView
            android:id="@+id/videoView1"
            android:layout_width="300dp"
            android:layout_gravity="center"
            android:layout_height="300dp"
            android:visibility="visible" />

</FrameLayout>
...