在Android的VideoView中播放视频
我不明白为什么我不能在视频视图中播放视频。我得到的信息是: 无法播放视频:抱歉,无法播放此视频 我也为我的模拟器创建了一个SD卡。我是否需要将SD卡放在SDK中的特定文件夹中?请评论 布局如下:在Android的VideoView中播放视频,android,Android,我不明白为什么我不能在视频视图中播放视频。我得到的信息是: 无法播放视频:抱歉,无法播放此视频 我也为我的模拟器创建了一个SD卡。我是否需要将SD卡放在SDK中的特定文件夹中?请评论 布局如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" android:layout_height="fill_parent" androi
<?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>
等待回复…代码似乎完美无瑕! 简单明了。
所以它应该在手机上工作。模拟器很难播放视频,我也遇到过这种情况 尝试将所需的API级别增加到最新,这可能会有所帮助 右键单击打开的项目,选择属性>Android>检查右侧的最新版本
Igor您可以通过DDMS访问SD卡我猜您的视频与Android不兼容。用不同的视频试试看。当然,它可以在Android上使用(但由于某些原因,它不能在较新的设备上使用)。如果该视频有效,而您的视频无效,那么您的视频与Android不兼容 正如其他人所指出的,请在设备上进行测试。emulator上的视频播放需要太多的电源
更新2020-02-18:是一个内容相同的MP4,但我不知道它是否与我之前链接的MP4相同。好吧!如果您使用的是android兼容视频,则出现此警报的唯一原因是您必须使用大于300MB的视频。 Android不支持大视频(>300MB)。
我们可以通过NDK优化得到它 将
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();
}
问题可能在于电影格式。如果它是H264编码的,请确保它在基线配置文件中 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);
}
或者。要确认视频格式正确(分辨率、比特率、编解码器等),请使用下面的-摘录进行检查: 标准定义(低质量)
视频编解码器-H.264
视频分辨率-176 x 144像素
视频帧速率-12 fps
视频比特率-56 Kbps
音频编解码器-AAC-LC
音频频道-(单声道)
音频比特率-24 Kbps 标准清晰度(高质量)
视频编解码器-H.264
视频分辨率-480 x 360像素
视频帧速率-30 fps
视频比特率-500 Kbps
音频编解码器-AAC-LC
音频通道-2(立体声)
音频比特率-128 Kbps 高清720p(所有设备均不适用)
视频编解码器-H.264
视频分辨率-1280 x 720像素
视频帧速率-30 fps
视频比特率-2Mbps
音频编解码器-AAC-LC
音频通道-2(立体声)
音频比特率-192 Kbps添加android.permission.READ\u外部存储在清单中,为我工作我对VideoView有几乎相同的问题。我尝试用Nexus 5播放一段视频(1080*1080),效果很好,但Galaxy ace 2上的同一段视频给了我无法播放视频的信息 但我注意到,对于较低的视频清晰度(120x120),它可以正常工作 所以也许只是“大小”的问题 (尤其是金发美女秘书3gp视频……) 不要使用setVideoPath,而是使用setVideoUri。您可以使用(Environment.getExternalStorageDirectory().getAbsolutePath()+“/yourvideo”)获取存储在外部存储器中的视频路径,并将其解析为Uri。如果您的视频存储在SD卡/MyVideo/video.mp4中,请将代码中的“/yourvideo”替换为“/MyVideo/video.mp4” 这对我来说很好:) `示例项目 我终于得到了一个概念验证项目,所以我将在这里分享它 设置布局 布局是这样设置的,其中浅灰色区域是
视频视图
activity_main.xml
我肯定会阅读更多关于每个参数的信息,看看哪些参数需要调整,以保证视频和音频质量
接下来,将output_file.mp4
重命名为test.mp4
,并将其放入Android项目的/res/raw
文件夹中。如果文件夹不存在,请创建该文件夹
代码
代码中没有太多内容。单击“播放”按钮时,视频将播放。谢谢你的帮助
MainActivity.java
完成了
就这些。您现在应该可以在模拟器或真实设备上播放视频剪辑。以下是“我的日志猫”窗口中显示的错误消息:07-16 17:16:30.237:error/PlayerDriver(30):Command PLAYER\u SET\u DATA\u SOURCE已完成并带有错误或信息PVMFErrNotSupported 07-16 17:16:30.247:error/MediaPlayer(240):error(1,-4)07-16 17:16:30.257:ERROR/MediaPlayer(240):ERROR(1,-4)07-16 17:16:30.267:DEBUG/VideoView(240):ERROR:1,-4 07-16 17:16:30.287:WARN/PlayerDriver(30):pvmfinfoerrorhandlingcomplete您是在设备上还是在模拟器上尝试执行此操作?我认为模拟器不支持视频播放。当从文件管理器(如ASTRO)加载视频时,设备上的视频播放是否正常?我正在尝试在模拟器上播放视频文件。我有一个简单的文件管理器,可以从DDMS访问。你说ASTRO是什么意思?我所有的视频文件都放在res/raw文件夹中。金发女郎秘书,我要求使用1.6作为我的版本。不知您能否告诉我如何将设备的操作系统更新到2.2(Froyo)?谢谢,我的DROID上安装了2.0.1。我正试图在上面运行此代码,但仍然无法成功。请让我知道问题出在哪里?如果安卓设备(HTC、DROID等)没有安装SD卡,那么我们可以在该设备上的应用程序中播放视频吗?我在日志cat窗口中收到以下错误消息:07-21 03:35:47.854:error/PlayerDriver(30):Command PLAYER_SET_DATA_SOURCE已完成,但有错误或信息PVMFErrNotSupported 07-21 03:35:47.864:错误/MediaPlayer(28
//just copy this code to your main activity.
if ( ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ){
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)){
}else {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
}else {
}
VideoView videoView =(VideoView) findViewById(R.id.videoViewId);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/yourvideo");
videoView.setVideoURI(uri);
videoView.start();
<?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>
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
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();
}
}
//just copy this code to your main activity.
if ( ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ){
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)){
}else {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
}else {
}