Android VideoView Cannot play video mp4

22,989

Thanks for the answer from Android MediaPlayer error (1, -2147483648).

I found the video file 2 was encoded in H.264 Main Profile, that my mobile phone cannot be played. Android Supported Media Format suggests H.264 in Baseline Profile. So after converting the video to Baseline Profile, it can be played on my phone.

Share:
22,989
tim
Author by

tim

Updated on September 29, 2020

Comments

  • tim
    tim over 3 years

    I used the Android VideoView to play a video file via HTTP. My problem is my phone prompts "Cannot play video Sorry, this video cannot be played." when playing a mp4 file from HTTP. But it is ok when playing another mp4 video file.

    When used in a newer phone, like Samsung Galaxy S, my program can play both mp4 video file from HTTP successfully.

    My phone:

    Samsung GT-S5830  
    Android version: 2.3.4  
    Display: 320x480.
    
    Video file 1 (OK):  
    Video Codec: H.264  
    Resolution: 640x360  
    Others: 16:9, 340kbps, 29.92fps  
    Audio Codec: AAC, 44kHz 96kbps Stereo.
    
    
    Video file 2 (Fail):  
    Video Codec: H.264  
    Resolution: 640x360  
    Others: 16:9, 993kbps, 25fps  
    Audio Codec: AAC 44kHz 125kbps Stereo.
    

    Below is my code that hardcoded to play the video file 1 successfully.

    public class VideoPlayActivity extends Activity {
    VideoView vv;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
        vv = new VideoView(this);
        RelativeLayout.LayoutParams param1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        param1.addRule(RelativeLayout.CENTER_IN_PARENT);
        vv.setOnErrorListener(new OnErrorListener() {
    
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Log.d("Dbg", "OnErrorListener: onError: " + what + ", " + extra);
                return false;
            }
    
        });
    
        RelativeLayout layout = new RelativeLayout(this);
        layout.addView(vv, param1);
    
        setContentView(layout);
    
        playContent();
    
     }
    
     private void playContent() {
        String path = "http://rmcdn.2mdn.net/MotifFiles/html/1248596/android_1330378998288.mp4";
    
        vv.setVideoPath(path);
        vv.requestFocus();
        vv.start();
        }
    }
    

    The error log when playing video file 2 is as below:

    11-19 17:49:30.119: I/VideoView(16860): start()  
    11-19 17:49:30.139: E/MediaPlayer(16860): error (1, -2147483648)  
    11-19 17:49:30.149: E/MediaPlayer(16860): Error (1,-2147483648)  
    11-19 17:49:30.149: D/VideoView(16860): Error: 1,-2147483648  
    11-19 17:49:30.149: D/Dbg(16860): OnErrorListener: onError: 1, -2147483648  
    

    It is noted that I tried to install the MX player and downloaded the both video file into my phone's SD card. The MX player can play both video files successfully.

    So, can anyone help me to answer the questions below:

    1. Why my program cannot play the video file 2 on my phone?
    2. How can I play the video file 2 on my phone?

    Thank you for your advice.

  • Rudi
    Rudi over 10 years
    Thanks for your question and answer, I'm trying to play a video on the videoview as well and have the same problem , I didnt get what did you mean with Main Profile and Baseline Profile ? how and where can I find more about them ? thanks in advance
  • Jaydev
    Jaydev almost 8 years
    Did you convert it at runtime ?
  • Pikaboo
    Pikaboo about 4 years
    @tim can you please answer rudis question?