在Android上从iPhone上传的Cant Play Video(.mp4)

时间:2014-08-13 04:05:48

标签: android

其实我为iPhone和Android设备制作了一个应用程序..并且该视频功能可用,因此iphone设备上传的视频,视频(mp4)无法在Android设备中播放,所以请任何机构帮助我

pDialog = new ProgressDialog(this);

    // Set progressbar message
    pDialog.setMessage("Buffering...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    // Show progressbar
    pDialog.show();

    try {
        // Start the MediaController
        MediaController mediacontroller = new MediaController(
                PlayVideoViewFromURLActivity.this);
        mediacontroller.setAnchorView(mVideoView);

        // Get the URL from String VideoURL

        Uri videoUri = Uri.parse(vidUrl); // vidUrl is url of video which on server 

        mVideoView.setMediaController(mediacontroller);
        mVideoView.setVideoURI(videoUri);

    } catch (Exception e) {

        e.printStackTrace();
    }

    mVideoView.requestFocus();
    mVideoView.setOnPreparedListener(new OnPreparedListener() {
        // Close the progress bar and play the video
        public void onPrepared(MediaPlayer mp) {
            pDialog.dismiss();
            mVideoView.start();
        }
    });
    mVideoView.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
            finish();
        }
    });

完整的Logcat错误:

08-13 09:45:10.062: D/MediaPlayer(1929): Couldn't open file on client side, trying server side

08-13 09:45:11.770: E/MediaPlayer(1929): error (1, -2147483648)

08-13 09:45:11.790: E/MediaPlayer(1929): Error (1,-2147483648)

08-13 09:45:11.790: D/VideoView(1929): Error: 1,-2147483648

4 个答案:

答案 0 :(得分:2)

有一种使用MediaPlayer类流式传输视频的替代方法,就像我们在创建音乐播放器时一样。您可以使用曲面视图将媒体(包括视频)流式传输到MediaPlayer对象。例如,您可以使用以下布局:

<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:background="#000000"
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/surfView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<强> MainActivity.java

public class TestAct extends Activity implements SurfaceHolder.Callback, OnPreparedListener
{

private MediaPlayer mediaPlayer;
private SurfaceHolder vidHolder;
private SurfaceView vidSurface;
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);

    vidSurface = (SurfaceView) findViewById(R.id.surfView);
    vidHolder = vidSurface.getHolder();
    vidHolder.addCallback(this);
}

@Override
public void surfaceCreated(SurfaceHolder arg0)
{
    try
    {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDisplay(vidHolder);
        mediaPlayer.setDataSource(vidAddress);
        mediaPlayer.prepare();
        mediaPlayer.setOnPreparedListener(this);
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

@Override
public void onPrepared(MediaPlayer mp)
{
    mediaPlayer.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
}

}

希望这会有所帮助:)

答案 1 :(得分:1)

<强>问题:

关于视频与设备平台支持之间的编码 - 解码冲突的问题。

<强>解决方案:

我会坚持使用Vitamio库在android中播放视频。 它使用起来非常简单,也很可靠。

示例:

您可以将其添加到xml文件中,例如VideoView

   <io.vov.vitamio.widget.VideoView
    android:id="@+id/surface_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

您可以轻松控制播放器,

public class VideoViewDemo extends Activity {

/**
 * TODO: Set the path variable to a streaming video URL or a local media file
 * path.
 */
private String path = "";
private VideoView mVideoView;
private EditText mEditText;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    if (!LibsChecker.checkVitamioLibs(this))
        return;
    setContentView(R.layout.videoview);
    mEditText = (EditText) findViewById(R.id.url);
    mVideoView = (VideoView) findViewById(R.id.surface_view);
    if (path == "") {
        // Tell the user to provide a media file URL/path.
        Toast.makeText(VideoViewDemo.this, "Please edit VideoViewDemo Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG).show();
        return;
    } else {
        /*
         * Alternatively,for streaming media you can use
         * mVideoView.setVideoURI(Uri.parse(URLstring));
         */
        mVideoView.setVideoPath(path);
        mVideoView.setMediaController(new MediaController(this));
        mVideoView.requestFocus();

        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                // optional need Vitamio 4.0
                mediaPlayer.setPlaybackSpeed(1.0f);
            }
        });
    }

}

public void startPlay(View view) {
    String url = mEditText.getText().toString();
    path = url;
    if (!TextUtils.isEmpty(url)) {
        mVideoView.setVideoPath(url);
    }
}

public void openVideo(View View) {
  mVideoView.setVideoPath(path);
}

}

<强>参考:

VideoViewDemo

我希望它会对你有所帮助。

答案 2 :(得分:1)

Can't Play video in android uploded from iphone

为什么mp4不能分4个步骤播放:

  1. 使用'ffmpeg'将vidView网址下载到PC

  2. $ ffmpeg -i $ downloadFileName

  3. 检查报告的编解码器的详细信息

  4. 将这些报告的编解码器与android media supports

  5. 进行比较

    注意:#2很可能会报告未在#4

    列出的编解码器

答案 3 :(得分:0)

虽然视频是.mp4,但视频是在iOS上压缩的,原生Android播放器无法播放/解码。

我遇到OP在开发跨平台时遇到的这个问题。一个简单的替代方案是使用VLC for Android,它是开源的,基于FFMPEG并使用SurfaceViews。

为此,请在build.grade文件中包含以下内容:

compile "de.mrmaffen:vlc-android-sdk:1.0.3"

例如,您可以为视频制作新活动,并在onCreate中执行以下操作:

mSurfaceView = (SurfaceView) findViewById(R.id.player_surface);
mSurfaceHolder = mSurfaceView.getHolder();

mSurfaceFrame = (FrameLayout) findViewById(R.id.player_surface_frame);
mMediaUrl = getIntent().getExtras().getString("videoUrl");

try {
    mLibVLC = LibVLC.getInstance();
    mLibVLC.setAout(mLibVLC.AOUT_AUDIOTRACK);
    mLibVLC.setVout(mLibVLC.VOUT_ANDROID_SURFACE);
    mLibVLC.setHardwareAcceleration(LibVLC.HW_ACCELERATION_FULL);
    mLibVLC.eventVideoPlayerActivityCreated(Boolean.TRUE);

    mLibVLC.init(getApplicationContext());
} catch (LibVlcException e){
    Log.e(TAG, e.toString());
}

mSurfaceHolder.addCallback(mSurfaceCallback);
mSurface = mSurfaceHolder.getSurface();

mLibVLC.attachSurface(mSurface, VideoVLCActivity.this);
mLibVLC.playMRL(mMediaUrl);

可在此处找到大量信息以进行故障排除: VLC for Android VideoLAN Forums

有一个更详细的例子here,虽然它使用不同版本的libvlc.LibVLC并包含不同的方法,但它会让你很好地了解添加控件需要哪些步骤,设置正确的尺寸,纵横比,方向等。