2010-07-16 154 views
47

我無法弄清楚爲什麼我無法在VideoView中播放視頻。我得到的消息是:在Android中使用VideoView播放視頻

Cannot Play Video : Sorry, this video cannot be played.

我爲我的模擬器也創建了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> 

下面的代碼:

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(); 
    } 
} 

等待答覆...

+0

這些人是我登錄貓窗口中顯示的錯誤消息: 07-16 17:16:30.237:ERROR/PlayerDriver(30):命令PLAYER_SET_DATA_SOURCE完成了錯誤或信息PVMFErrNotSupported 07-16 17 :16:30.247:錯誤/ MediaPlayer(240):錯誤(1,-4) 07-16 17:16:30.257:錯誤/ MediaPlayer(240):錯誤(1,-4) 07-16 17:16 :30.267:DEBUG/VideoView(240):錯誤:1,-4 07-16 17:16:30.287:WARN/PlayerDriver(30):PVMFInfoErrorHandlingComplete – 2010-07-16 12:19:02

+0

您是否試圖在設備或模擬器上執行此操作?我不認爲模擬器支持視頻播放。從文件管理器加載時,視頻在設備上播放是否正常ASTRO? – Dave 2010-07-16 13:37:46

+0

我試圖在我的模擬器上播放視頻文件。我有一個簡單的文件管理器,可以從我的DDMS訪問。 ASTRO是什麼意思? – 2010-07-16 17:18:08

回答

27

我的猜測是您的視頻與Android不兼容。嘗試使用其他視頻。 This one絕對 作品 曾用於Android的工作(但由於某種原因,不在較新的設備上)。如果該視頻適用,而您的視頻不適用,那麼您的視頻與Android不兼容。

正如其他人所指出的,請在設備上進行測試。模擬器上的視頻播放功耗太大。

+0

我放置了您在我的資源中建議的視頻/ raw文件夾並更改爲: video.setVideoPath(「/ sdcard/documentariesandyou.mp4」); 但我仍然無法播放視頻。我所得到的是消息無法播放視頻「對不起,這個視頻無法播放」。 這是什麼問題? – 2010-08-19 06:23:52

+1

@Maxood:那麼,您的設備有些東西可用。這個視頻已經在我嘗試過的所有方面發揮了作用:G1,DROID,N1,難以置信等。事實上,我在過去的幾個小時內以一種令人難以置信的方式播放了它。請記住,你永遠不應該硬編碼'/ sdcard',特別是考慮到它在Android 2.2上是錯誤的並且選擇其他設備。 – CommonsWare 2010-08-19 10:11:48

+0

我們有一個新買的DROID。現在有哪些先決條件需要在Android上運行視頻文件? 另外我應該編碼而不是/ sdcard?謝謝 – 2010-08-19 11:43:52

2

的代碼似乎是完美無瑕! 簡單明瞭。
所以它應該在手機上工作。模擬器播放視頻很難,它也發生在我身上。

嘗試將所需的API級別提高到最新,這可能會有所幫助!

在打開的項目中點擊右鍵,選擇屬性>安卓>檢查最新版本右側...

伊戈爾

+0

我需要在這裏使用1.6作爲我的版本。不知道,如果你能告訴我如何將我的設備的操作系統更新到2.2(Froyo)?謝謝 – 2010-07-20 06:35:53

+0

我在我的DROID上安裝了2.0.1。我試圖在上面運行這個代碼,但仍然無法成功。請讓我知道最新的問題? – 2010-08-18 08:15:44

2

您可以通過訪問DDMS你的SD卡

+0

如果Android設備(HTC,DROID等))沒有安裝SD卡,那麼我們可以在該設備的應用程序中播放視頻嗎? – 2010-07-21 10:43:50

+0

我收到以下錯誤消息在我的日誌貓窗口中: 07-21 03:35:47.854:錯誤/ PlayerDriver(30):命令PLAYER_SET_DATA_SOURCE完成,出現錯誤或信息PVMFErrNotSupported 07-21 03:35: 47.864:ERROR/MediaPlayer(284):error(1,-4) 07-21 03:35:47.872:錯誤/ MediaPlayer(284):錯誤(1,-4) – 2010-07-21 11:34:39

0

好吧!如果您使用的是Android兼容性視頻,則此警報的唯一原因是您必須使用大小超過300MB的視頻。 Android不支持大視頻(> 300MB)。 我們可以通過使用NDK優化來獲得它。

4

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(); 
} 
+1

這與問題無關,不會改變任何內容。 – zeh 2016-06-07 15:08:37

0

喜的問題可能是與電影格式。如果它的H264編碼,請確保它在基線配置文件中。

2

VideoView只能流式傳輸3gp視頻我推薦此代碼來流式傳輸您的視頻 或嘗試更高版本的機器人。嘗試視頻在線流媒體。

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); 
} 

Click here to watch Android Video Streaming Tutorial

+0

如何顯示當前錄製的視頻? – 2015-02-27 11:27:57

2

確認您的視頻格式是否正確(分辨率,比特率,編解碼器等)。)與official documentation檢查 - 下面提取:

標準清晰度(低質量)
視頻編解碼器 - H.264
視頻分辨率 - 176×144像素
視頻幀率 - 12 fps的
視頻比特率 - 56 KBPS
音頻編碼解碼器 - AAC-LC
音頻頻道 - (單聲道)
音頻比特率 - 24 Kbps的

標準清晰度(高品質)
視頻編解碼器 - H.264
視頻分辨率 - 480 * 360像素
視頻幀速率 - 每秒30幀
視頻比特率 - 500 Kbps的
音頻編碼解碼器 - AAC-LC
音頻信道 - 2(立體聲)
音頻比特率 - 128 Kbps的

高清晰度720p的(N /上的所有設備A)
視頻編解碼器 - H.264
視頻分辨率 - 1280×720像素
視頻幀率 - 每秒30幀
視頻比特率 - 2 Mbps的
音頻編碼解碼器 - AAC-LC
音頻頻道 - 2(立體聲)
音頻比特率 - 192 Kbps的

4

添加android.permission.READ_EXTERNAL_STORAGE清單中,工作對我來說

+0

對於我來說,清單中缺少互聯網許可是個問題:'<使用權限android:name =「android.permission。INTERNET「/>' – Metallica 2015-04-09 08:33:29

+0

<使用權限android:name =」android.permission.READ_EXTERNAL_STORAGE「/> – nafsaka 2016-05-03 04:23:42

0

我和VideoView有幾乎相同的問題。我嘗試用Nexus 5播放視頻(1080 * 1080),效果很好,但Galaxy ace 2上的相同視頻給了我無法播放視頻消息。

但我注意到,與一個較低的視頻定義(120x120),它工作正常。

因此,或許只是一個 「尺寸」 (特別是與blonde_secretary.3gp視頻....)

2
VideoView videoView =(VideoView) findViewById(R.id.videoViewId); 

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/yourvideo"); 

videoView.setVideoURI(uri); 
videoView.start(); 

而不是使用setVideoPath使用setVideoUri的問題。您可以使用(Environment.getExternalStorageDirectory()。getAbsolutePath()+「/ yourvideo」)獲取存儲在外部存儲器中的視頻路徑並將其解析爲Uri。如果您的視頻存儲在SD卡/ MyVideo網站/ video.mp4通過 「/MyVideo/video.mp4」 替換 「/ yourvideo」 代碼

這對我工作得很好:) `

+1

請在您的代碼示例中添加說明並對代碼進行格式化 – 2016-02-12 07:28:21

+0

@MaciejLach我已添加說明。 。感謝您幫助我改進我的答案 – 2016-02-19 05:47:10

13

示例項目

我終於得到了一個概念驗證項目,所以我會在這裏分享。

設置佈局

佈局設置這樣的,其中淺灰色區域是VideoView

enter image description here

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> 

準備的視頻剪輯

按照documentation,Android的應該支持所有的API級別的MP4播放H.264(解碼)。不過,影響實際視頻播放與否的因素似乎有很多。我可以找到最深入的答案,告訴如何編碼視頻是here。它使用強大的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 

我肯定會閱讀更多關於這些參數的每一個,看看哪些需要調整,只要視頻和音頻質量。

接下來,將output_file.mp4重命名爲test.mp4,並將其放入您的Android項目的/res/raw文件夾中。如果文件夾不存在,請創建該文件夾。

代碼

代碼沒有太多。當點擊「播放」按鈕時播放視頻。感謝this answer尋求幫助。

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(); 
    } 
} 

成品

這就是全部。您現在應該可以在模擬器或真實設備上播放視頻剪輯。

+0

您好,很高興您獲得瞭解決方案。我被困在這裏。我遇到了類似的問題,但我的視頻位於Firebase存儲中。請問您可以看到這個[post](https ://stackoverflow.com/questions/44447813/populating-a-video-url-from-firebase-and-display-that-video-in-a-videoview-in-an?noredirect = 1#comment75903748_44447813)讓我可以得到一個線索,請引導我 – Chip 2017-06-09 16:08:46

+1

@PC。我從來沒有使用Firebase,但你應該把你的問題分解成更小的部分。首先確保Android會播放視頻,如果它存儲在本地(如我的上面的例子)如果這樣做,然後嘗試下載(不是流式傳輸)來自Firebase的內容,看看你是否可以像在本地一樣玩它。 – Suragch 2017-06-09 23:22:19

0
//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 { 
     } 
+1

你能否給出一些解釋給你的答案? – 2017-04-21 13:19:49

相關問題