我无法弄清楚为什么我无法在我的VideoView中播放视频.所有我收到的消息是:
无法播放视频:对不起,此视频无法播放.
我也为我的模拟器创建了一张SD卡.我是否需要将SD卡放入SDK中的特定文件夹中?请评论.
这是布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_height="fill_parent"
android:paddingLeft="2px"
android:paddingRight="2px"
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="2px"
android:paddingBottom="2px"
android:layout_width="fill_parent"
android:orientation="vertical">
<VideoView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/VideoView" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是代码:
package com.examples.videoviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
public class VideoViewDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
VideoView videoView = (VideoView)findViewById(R.id.VideoView);
//MediaController mediaController = new MediaController(this);
// mediaController.setAnchorView(videoView);
//videoView.setMediaController(mediaController);
videoView.setVideoPath("/sdcard/blonde_secretary.3gp");
videoView.start();
}
}
Run Code Online (Sandbox Code Playgroud)
等待回复......
Com*_*are 33
我的猜测是你的视频与Android不兼容.尝试使用其他视频.这个肯定适用于Android(但由于某种原因不适用于较新的设备).如果该视频有效,而您的视频无效,那么您的视频与Android不兼容.
正如其他人所说,请在设备上进行测试.模拟器上的视频播放需要太多电量.
Sur*_*gch 21
我终于得到了一个概念验证项目,所以我将在这里分享.
布局设置如下,浅灰色区域是VideoView.
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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="com.example.videotest.MainActivity">
<VideoView
android:id="@+id/videoview"
android:layout_width="300dp"
android:layout_height="200dp"/>
<Button
android:text="Play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/videoview"
android:onClick="onButtonClick"
android:id="@+id/button"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
根据文档,Android应支持所有API级别的mp4 H.264播放(解码).但是,似乎有很多因素会影响实际视频是否播放.深入回答最我能找到告知如何编码视频是在这里.它使用功能强大的ffmpeg命令行工具转换为应该可以在所有(希望是?)Android设备上播放的内容.阅读我链接的答案以获得更多解释.我使用了稍微修改过的版本,因为我的原始版本出现了错误.
ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4
Run Code Online (Sandbox Code Playgroud)
我肯定会在每个参数上阅读更多内容,看看哪个需要调整视频和音频质量.
接下来,重命名output_file.mp4来test.mp4并把它放在你的Android项目的/res/raw文件夹中.如果文件夹不存在,请创建该文件夹.
代码并不多.单击"播放"按钮时播放视频.感谢这个答案的帮助.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonClick(View v) {
VideoView videoview = (VideoView) findViewById(R.id.videoview);
Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.test);
videoview.setVideoURI(uri);
videoview.start();
}
}
Run Code Online (Sandbox Code Playgroud)
就这样.您现在应该可以在模拟器或真实设备上播放视频片段.
小智 7
让videoView您的活动类的成员变量,而不是保持它作为本地的的onCreate功能:
VideoView videoView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
videoView = (VideoView)findViewById(R.id.VideoView);
videoView.setVideoPath("/sdcard/blonde_secretary.3gp");
videoView.start();
}
Run Code Online (Sandbox Code Playgroud)
VideoView 只能流式传输 3gp 视频我推荐此代码来流式传输您的视频或尝试更高版本的 android。尝试视频在线流媒体。
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
String videourl = "http://something.com/blah.mp4";
Uri uri = Uri.parse(videourl);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)