8

I'm trying to play video in my application and I get Can't play this video error. I came across lot of threads regarding this. They have asked to start video once the player is prepared. I'm doing the same. But couldn't figure out the problem. Please find my code below.

public class Video extends Activity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener {

public VideoView vidPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {

    setup();
    activateVideoPlayer();
}

public void setup() {
    setContentView(R.layout.step_video);        
    vidPlayer = (VideoView) findViewById(R.id.videoPlayer);
    String playableUrl = "http://teststreaming7v.s3.amazonaws.com/public/7515/1374782317346-beagle_puppy_howl_640x360_448_main.mp4";

}

@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
    mediaPlayer.setLooping(false);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        startPlayer();
    videoLoaded = true;
    mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
        // show updated information about the buffering progress
        public void onBufferingUpdate(MediaPlayer mp, int percent) {
            Log.d(this.getClass().getName(), "percent: " + percent);

        }
    });

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        public void onCompletion(MediaPlayer mediaPlayer) {
            progress.setProgress(100);
                    setResult(Activity.RESULT_OK);
                    finish();
        }
    });

    readyToPlay = true;
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

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

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.engagement_fade_in, R.anim.engagement_fade_out);
}

@Override
public void onBackPressed() {
    isGoingBack = true;
    setResult(Activity.RESULT_CANCELED);
    finish();
}

@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
    JLogger.getInstance(this).log("Video Player Error!!" + Integer.toString(i) + " / " + Integer.toString(i1));

    return false;
}

public void startPlayer() {
    isPaused = false;
    vidPlayer.start();
}

public void pausePlayer() {
    isPaused = true;
        vidPlayer.pause();
}

private void activateVideoPlayer() {
    vidPlayer.setOnErrorListener(this);
    vidPlayer.setOnPreparedListener(this);

    btnPlay.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (vidPlayer.isPlaying()) {
                pausePlayer();
            } else {
                startPlayer();
            }
        }
    });

    vidPlayer.setVideoURI(Uri.parse(playableUrl));
    vidPlayer.seekTo(step.resumePosition);
}
}

Device that I'm using is Motorola Atrix - Android 4.1.2 - Unlocked. I also tried in other devices like Nexus 4, 5 and Samasung Tab 2. Its working fine there.

This is my log :

12-16 13:42:35.184    4427-4427/? D/MediaPlayer﹕ Couldn't open file on client side,trying server side
12-16 13:42:35.184    1417-1830/? I/AwesomePlayer﹕ setDataSource_l('http://teststreaming7v.s3.amazonaws.com/public/7515/1374782317346-beagle_puppy_howl_640x360_448_main.mp4')
12-16 13:42:35.184    1417-5481/? V/ChromiumHTTPDataSource﹕ connect on behalf of uid 10069
12-16 13:42:35.184    1417-5481/? I/ChromiumHTTPDataSource﹕ connect to http://teststreaming7v.s3.amazonaws.com/public/7515/1374782317346-beagle_puppy_howl_640x360_448_main.mp4 @0
12-16 13:42:35.684    1424-1673/? I/﹕ odm_disp_esd_thread is running(467) state=1
12-16 13:42:35.684    1417-5481/? W/WVMExtractor﹕ Failed to open libwvm.so
12-16 13:42:36.184    4547-4576/? W/GAV2﹕ Thread[GAThread,5,main]: Exception sending hit: HttpHostConnectException
12-16 13:42:36.184    4547-4576/? W/GAV2﹕ Thread[GAThread,5,main]: Connection to https://ssl.google-analytics.com refused
12-16 13:42:36.184    1417-5481/? E/OMXCodec﹕ failed to allocate node OMX.Nvidia.h264.decode
12-16 13:42:36.184    1417-5481/? E/OMXCodec﹕ failed to allocate node OMX.google.h264.decode
12-16 13:42:36.184    1417-5481/? I/OMXCodec﹕ [OMX.google.h264.decoder] AVC profile = 77 (Main), level = 22
12-16 13:42:36.184    1417-5481/? I/OMXCodec﹕ [OMX.google.h264.decoder] video dimensions are 320 x 240
12-16 13:42:36.184    1417-5481/? I/OMXCodec﹕ [OMX.google.h264.decoder] Crop rect is 320 x 240 @ (0, 0)
12-16 13:42:37.184    4427-4427/? D/MediaPlayer﹕ getMetadata
12-16 13:42:37.184    4427-4427/? D/VideoSample﹕ onPrepared() method
12-16 13:42:37.184    1417-1687/? D/AudioHardwareMot﹕ bufSize = 8192
12-16 13:42:37.184    1417-5484/? E/SoftAVC﹕ Decoder failed: -2
12-16 13:42:37.184    1417-5485/? E/OMXCodec﹕ [OMX.google.h264.decoder] ERROR(0x80001001, -1007)
12-16 13:42:37.184    1417-5486/? I/SoftAAC2﹕ Reconfiguring decoder: 44100 Hz, 2 channels
12-16 13:42:37.184    4427-4449/? E/MediaPlayer﹕ error (1, -2147483648)
12-16 13:42:37.184    1692-2165/? D/dalvikvm﹕ GC_EXPLICIT freed 113K, 39% free 8906K/14467K, paused 3ms+5ms, total 93ms
12-16 13:42:37.184    4427-4427/? E/MediaPlayer﹕ start called in state 0
12-16 13:42:37.184    4427-4427/? E/MediaPlayer﹕ error (-38, 0)
12-16 13:42:37.184    4427-4427/? E/MediaPlayer﹕ Error (1,-2147483648)
12-16 13:42:37.184    4427-4427/? D/VideoView﹕ Error: 1,-2147483648
12-16 13:42:37.184    4427-4427/? D/VideoSample﹕ VideoSample: Video Player Error!!1 / -2147483648
12-16 13:42:37.184    4427-4427/? D/VideoSample﹕ VideoSample: Get url:    http://teststreaming7v.s3.amazonaws.com/public/7515/1374782317346-beagle_puppy_howl_640x360_448_main.mp4
12-16 13:42:37.184    4427-4427/? E/MediaPlayer﹕ Error (-38,0)
12-16 13:42:37.184    4427-4427/? D/VideoView﹕ Error: -38,0
12-16 13:42:37.184    4427-4427/? D/VideoSample﹕ VideoSample: Video Player Error!!-38 / 0
12-16 13:42:37.184    4427-4427/? D/VideoSample﹕ VideoSample: Get url: http://teststreaming7v.s3.amazonaws.com/public/7515/1374782317346-beagle_puppy_howl_640x360_448_main.mp4`

EDIT 1

I tried playing the following two .mp4 files out of which first one plays and second doesn't.

Video 1 Properties
URL : Video URL
Video Bit rate : 179.9 kbits/sec
Audio channels : Stereo

Video1

Video 2 Properties URL : Video URL
Video Bit rate : 446.9 kbits/sec
Audio channels : Mono

Video2

LoveMeSomeFood
  • 3,137
  • 7
  • 30
  • 53
  • probably because the moov atom is not at the beginning of the file – njzk2 Dec 17 '13 at 16:20
  • @njzk2 doesn't this affect playing the same video in other devices like nexus 4 or 5 or samsung tablets? I'm not familiar with moov atom and other related topic. Sorry if I ask silly wrong questions. My second video doesn't play only in Motorola Atrix and LG Optimus. These are the devices I have checked. – LoveMeSomeFood Dec 17 '13 at 16:26
  • not entirely sure, but your point does make sense. – njzk2 Dec 17 '13 at 16:59
  • I found out what the problem was. Second video is not in AVC baseline profile. – LoveMeSomeFood Dec 17 '13 at 17:50

2 Answers2

9

The problem was that the second video is not in H.264 AVC Baseline profile.

LoveMeSomeFood
  • 3,137
  • 7
  • 30
  • 53
  • Thanks, by knowing this I was able to generate such an mp4 video with this gstreamer pipeline: `gst-launch-0.10 -e videotestsrc num-buffers=1000 ! x264enc qp-min=18 ! video/x-h264,stream-format=avc,profile=constrained-baseline ! qtmux ! filesink location=test.mp4` – jcarballo Sep 12 '14 at 22:37
2

I know someone who just had this problem, also with MP4 videos, the problem wasn't on code, it was on the video itself, something about the number of frames/second, try other videos, ones you know are perfectly made

TootsieRockNRoll
  • 3,218
  • 2
  • 25
  • 50
  • I never used videoview before, so you might want to take a look at these propositions: http://stackoverflow.com/questions/17399351/how-to-play-mp4-video-in-videoview-in-android – TootsieRockNRoll Dec 16 '13 at 20:25