I am trying to make use of MediaPlayer
class for playing a video file. The problem is video is not getting displayed at all though I can hear the sound in the video playing.
Following is the code of activity
public class MainActivity extends Activity implements OnClickListener {
private SurfaceView surfaceView;
private Button btnPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
addListener();
}
private void init() {
// TODO Auto-generated method stub
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
btnPlay = (Button) findViewById(R.id.btnPlay);
}
private void addListener() {
// TODO Auto-generated method stub
btnPlay.setOnClickListener(this);
}
MediaPlayer mediaPlayer = null;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnPlay:
try{
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
}else{
getWindow().setFormat(PixelFormat.UNKNOWN);
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.wildlife);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setFixedSize(176, 144);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.start();}
}catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
}
Following is the code of layout xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
<Button
android:id="@+id/btnPlay"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/surfaceView1"
android:layout_alignTop="@+id/surfaceView1"
android:text="@string/play" />
</RelativeLayout>
please tell me what needs to be done? Thanks in advance.
Setting your SurfaceView layout to wrap_content will not size a video to play at the proper aspect ratio.
You can refer to this answer link
https://stackoverflow.com/a/6283676/1441666
And also this blog Play media on surfaceview using android.media.MediaPlayer
You can override the
onSizeChanged()
function of theSurfaceView
class to get and set the size of the view.When ever the screen size has changed, this class is called.
As a second alternative, you may be able to set the size by setting the layout parameters (unsure if this works with ScrollView):
Well, I don't know if you need an specific situation, but have you already tried FullscreenVideoView?
It tries to abstracts all those SurfaceView problems and you can focus only in UI buttons. As It's open, you can subclass FullscreenVideoView and customize as you need.
set surface View height and width to fill parent in xml file.