Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android的VideoView中播放视频_Android - Fatal编程技术网

在Android的VideoView中播放视频

在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

我不明白为什么我不能在视频视图中播放视频。我得到的信息是:

无法播放视频:抱歉,无法播放此视频

我也为我的模拟器创建了一个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>

等待回复…

代码似乎完美无瑕! 简单明了。
所以它应该在手机上工作。模拟器很难播放视频,我也遇到过这种情况

尝试将所需的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 {
        }