其实我为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
答案 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);
}
}
<强>参考:强>
我希望它会对你有所帮助。
答案 2 :(得分:1)
Can't Play video in android uploded from iphone
为什么mp4不能分4个步骤播放:
使用'ffmpeg'将vidView网址下载到PC
$ ffmpeg -i $ downloadFileName
检查报告的编解码器的详细信息
将这些报告的编解码器与android media supports
注意:#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并包含不同的方法,但它会让你很好地了解添加控件需要哪些步骤,设置正确的尺寸,纵横比,方向等。