有没有办法在Android应用程序中播放.flv视频文件?

时间:2010-01-06 13:29:50

标签: android

可以开箱即用还是通过库?

3 个答案:

答案 0 :(得分: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插件来完成的。

首先,使用WebView创建一个布局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>

然后,创建Activity类,这是一个提取:

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&video=@VIDEO@' " +
            "  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("@VIDEO@", 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播放器。我使用了伟大的&amp;免费FLVPlayer http://www.platipus.nl/flvplayer/download/1.0/
  • FLV播放器必须位于网络上的网站上。我尝试将.swf放在应用程序的/ assets文件夹中并从那里调用它,但它无法加载FLV视频。如果有人能解决这个问题,请告诉我!
  • htmlCode包含将视频显示为“全屏”的代码(填充到webview的完整大小)。
  • callHiddenWebViewMethod非常重要,否则视频将在活动不再可见时继续播放(以及音频)。这个问题归功于评论中链接的sliseshare海报。谢谢!警告:这主要是一个黑客!要注意,事情不能按预期工作,或者可能在将来停止工作。顺便说一下,它对我来说非常好。

答案 1 :(得分:2)

不,这是不可能的。在Android上提供媒体播放的OpenCORE媒体库不支持.flv文件。

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

当然,在特定设备上可能支持其他媒体格式。但这可能因设备而异。

答案 2 :(得分:1)

试试vitamio。它是一个类似于媒体播放器的库,可以很容易地导入到您的项目中。唯一的问题是它也支持flv视频文件。