Mediaplayer的两个表面视图在三星的单个活动中不起作用

时间:2018-07-06 08:11:53

标签: android android-mediaplayer surfaceview samsung-mobile

这是一个奇怪的问题,尤其是在某些三星设备(例如SM J710FN)中。两个Mediaplayer不能一次播放两个视频,而是在其他设备上播放。(在这些设备上工作:Redmi note 4,samsung s5。Oneplus 5) 屏幕截图已附上。她的上半部分和下半部分有两个表面视图。如果我对上层Mediaplayer使用处理程序,它将为空白,而下层媒体播放器将起作用,这意味着只有首先初始化的媒体播放器才能工作。在其他设备中不会发生这种情况。

application screenshot

我附上了我非常写不好的示例代码。但这在此设备中不起作用。请让我知道它的硬件问题还是我必须做其他事情才能得到我想要的? 媒体播放器片段的代码。

Package com.my.controller;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import com.my.R;
import com.my.utilities.settings.Keys;
import com.my.utilities.utils.Logger;
import java.io.IOException;

public class MediaPlayerFragment extends Fragment implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

private String mParam1;
private String mParam2;
private SurfaceView mSurfaceView;
private MediaPlayer mMediaPlayer;
private SurfaceHolder mSurfaceHolder;
private String VIDEO_PATH = "/storage/emulated/0/mypath/Analyzed/abc.mp4";

public MediaPlayerFragment() {
// Required empty public constructor
}

public static MediaPlayerFragment newInstance(String param1, String param2) {
MediaPlayerFragment fragment = new MediaPlayerFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_media_player, container, false);
}


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

mSurfaceView = (SurfaceView)view.findViewById(R.id.surface_view);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mSurfaceHolder.addCallback(this);
VIDEO_PATH = getArguments().getString(Keys.BUNDLE_PLAYBACK_PATH);
Logger.LogDebug("Video path",VIDEO_PATH);
}

@Override
public void onAttach(Context context) {
super.onAttach(context);
}

@Override
public void onDetach() {
super.onDetach();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
Logger.LogDebug("Surface path","surface created");

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDisplay(mSurfaceHolder);
try {
mMediaPlayer.setDataSource(VIDEO_PATH);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void onPrepared(MediaPlayer mp) {

new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
mMediaPlayer.start();
}
});
Logger.LogDebug("ONPrepared ","starting mediaplayer");
}


@Override
public void onPause() {
super.onPause();
releaseMediaPlayer();
}

@Override
public void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
}
private void releaseMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
}

以下是片段:

package com.my.controller;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import com.crashlytics.android.Crashlytics;
import com.my.R;
import com.my.controller.activities.LoginActivity;
import com.my.controller.fragments.mySwings.FragmentSingleVideo;
import com.my.utilities.apporganiser.ReferenceWrapper;
import com.my.utilities.settings.Keys;

import io.fabric.sdk.android.BuildConfig;
import io.fabric.sdk.android.Fabric;


public class PlayerActivity extends AppCompatActivity {

private FragmentTransaction ft;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player_activity);
Bundle bundle = getIntent().getExtras();

initBothPlayers(bundle);
}

private void initBothPlayers(final Bundle bundle) {
ft = getSupportFragmentManager().beginTransaction();
MediaPlayerFragment mediaPlayerFragment = new MediaPlayerFragment();
mediaPlayerFragment.setArguments(bundle);
ft.add(R.id.container_1, mediaPlayerFragment, "upper");
ft.commit();

ft = getSupportFragmentManager().beginTransaction();
MediaPlayerFragment mediaPlayerFragment2 = new MediaPlayerFragment();
mediaPlayerFragment2.setArguments(bundle);
ft.add(R.id.container_2, mediaPlayerFragment2, "lower");
ft.commit();


}
}

错误:

   07-06 13:55:47.144 20723-20735/com.my E/MediaPlayer: error (1, -5001)
07-06 13:55:47.144 20723-20735/com.my V/MediaPlayer: callback application
07-06 13:55:47.144 20723-20735/com.my V/MediaPlayer: back from callback
07-06 13:55:47.14420723-20723/com.my E/MediaPlayer: Error (1,-5001)

0 个答案:

没有答案