2010-01-06 107 views
8

開箱即用或通過圖書館是可能的嗎?有沒有辦法在Android應用中播放.flv視頻文件?

+0

有一個解決方法,它也允許你從本地資產資源中玩,請閱讀我對這個類似問題的答案以獲得完整的解決方案:http://stackoverflow.com/questions/6596243/problem-to-load -flv-video-in-webview/6855609#6855609 – Merlin 2011-07-31 13:37:43

回答

2

不,這是不可能的。在Android上提供媒體播放的OpenCORE媒體庫不支持.flv文件。

您可以找到支持的媒體格式列表here。通用Android支持這些格式。在同一頁面上,您可以找到T-Mobile G1支持的其他一些格式。

當然,在特定設備上可能支持其他媒體格式。但是這可能因設備而異。

+0

HTC Hero內置Flash運行時,但不能播放獨立的FLV文件。 – 2010-01-06 14:09:15

+0

Nexus One顯然也有Flash 10.1,但我不知道它是否可以播放獨立的FLV文件。 – CommonsWare 2010-01-06 14:22:43

+0

這是不正確的。對的,這是可能的。我曾爲一家爲其硬件構建流式高清視頻軟件的公司工作,可在iOS,Android和Web瀏覽器中使用FLV進行查看。不幸的是,不能共享代碼,但我可以說這絕對是可行的。 – jungledev 2017-02-27 16:57:30

3

你可以在WebView中使用Flash插件播放FLV。請參閱此處:http://www.synesthesia.it/playing-flash-flv-videos-in-android-applications

通常,當您創建在移動設備中顯示網頁內容的應用程序時,您必須處理仍在網絡中廣泛使用的FLV視頻(直到HTML5將統治世界)。最好的辦法是用一些轉換器(如ffmpeg)轉換它們,但如果您無法訪問原始視頻或出於某些其他原因無法使用其他合適的格式進行轉換,您可以在這裏找到有關如何在Android應用程序中嵌入和播放Flash FLV視頻的快速教程。

這是通過使用WebView,能夠播放FLV的SWF播放器,以及安裝Android的Flash插件來完成的。

首先,創建一個web視圖的佈局XML,像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> 

<WebView android:layout_width="fill_parent" android:id="@+id/webview" android:layout_height="fill_parent"></WebView> </LinearLayout> 

然後,創建活動類,這裏是一個摘錄:

package it.synesthesia.flvplayer; 

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import java.net.URLEncoder; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.webkit.WebView; 

public class ViewVideo extends Activity { 

    WebView webView; 
    String htmlPre = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"></head><body style='margin:0; pading:0; background-color: black;'>"; 
    String htmlCode = 
      " <embed style='width:100%; height:100%' src='http://www.platipus.nl/flvplayer/download/1.0/FLVPlayer.swf?fullscreen=true&[email protected]@' " + 
      " autoplay='true' " + 
      " quality='high' bgcolor='#000000' " + 
      " name='VideoPlayer' align='middle'" + // width='640' height='480' 
      " allowScriptAccess='*' allowFullScreen='true'" + 
      " type='application/x-shockwave-flash' " + 
      " pluginspage='http://www.macromedia.com/go/getflashplayer' />" + 
      ""; 
    String htmlPost = "</body></html>"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_video); 

     webView = (WebView)findViewById(R.id.webview); 

     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setAllowFileAccess(true); 
     webView.getSettings().setPluginsEnabled(true); 
     webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); //thanks Patrick! 

     htmlCode = htmlCode.replaceAll("@[email protected]", video_link); 
     webView.loadDataWithBaseURL("fake://fake/fake", htmlPre+htmlCode+htmlPost, "text/html", "UTF-8", null); 
    } 




    @Override 
    protected void onPause(){ 
     super.onPause(); 

     callHiddenWebViewMethod("onPause"); 

     webView.pauseTimers(); 
     if(isFinishing()){ 
      webView.loadUrl("about:blank"); 
      setContentView(new FrameLayout(this)); 
     } 
    } 

    @Override 
    protected void onResume(){ 
     super.onResume(); 

     callHiddenWebViewMethod("onResume"); 

     webView.resumeTimers(); 
    } 

    private void callHiddenWebViewMethod(String name){ 
     // credits: http://stackoverflow.com/questions/3431351/how-do-i-pause-flash-content-in-an-android-webview-when-my-activity-isnt-visible 
     if(webView != null){ 
      try { 
       Method method = WebView.class.getMethod(name); 
       method.invoke(webView); 
      } catch (NoSuchMethodException e) { 
       Lo.g("No such method: " + name + e); 
      } catch (IllegalAccessException e) { 
       Lo.g("Illegal Access: " + name + e); 
      } catch (InvocationTargetException e) { 
       Lo.g("Invocation Target Exception: " + name + e); 
      } 
     } 
    } 

} 

一些解釋:

  • 如上所述,你需要一個FLV播放器。我用了很棒的&免費FLVPlayer http://www.platipus.nl/flvplayer/download/1.0/
  • FLV播放器必須駐留在網絡上的網站上。我嘗試將.swf放在應用程序的/ assets文件夾中,並從那裏調用它,但未能加載FLV視頻。如果有人能解決這個問題,請讓我知道!
  • htmlCode包含將視頻顯示爲「全屏」(填充到全尺寸的web視圖)的代碼。
  • callHiddenWebViewMethod非常重要,否則視頻將在活動不再可見(以及音頻)時繼續播放。對此的信任去評論中鏈接的sliseshare海報。謝謝!警告:這主要是一個黑客!注意,事情不能按預期工作,或者可能在將來停止工作。順便說一句,它對我來說非常好。
+1

儘管這可能會回答這個問題,但[這將是更可取的](http://meta.stackoverflow.com/q/8259)在此包含更多答案的基本部分,並提供了供參考的鏈接。 – 2015-11-26 00:24:02

+0

我複製粘貼在答案的文章。 – FrancescoR 2015-12-11 08:48:16

+0

似乎不起作用。 – NarendraJi 2017-07-12 10:54:53

1

嘗試vitamio。它是一個類似於mediaplayer的庫,它可以很容易地導入到你的項目中。唯一的是它也支持flv視頻文件。

相關問題