在安卓应用中有没有一种方法可以播放.flv视频文件?

8

是否可以直接使用或通过库实现?


有一个解决方法,可以让您从本地资源播放,请阅读我对类似问题的回答以获取完整解决方案:https://dev59.com/BGw15IYBdhLWcg3wd7lj#6855609 - Moog
3个回答

3
您可以在 WebView 中使用 Flash 插件播放 FLV 视频。请参见此处:http://www.synesthesia.it/playing-flash-flv-videos-in-android-applications 通常,在移动设备上创建显示 Web 内容的应用程序时,您必须处理 FLV 视频,这在 Web 上仍然广泛使用(直到 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: https://dev59.com/BXA75IYBdhLWcg3wK14p
        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
虽然这可能回答了问题,但最好在此处包含更多必要的答案部分,并提供参考链接。 - Nathan Tuggy
我将文章复制粘贴到答案中。 - FrancescoR
似乎无法工作。 - Narendra Singh
这段代码已经有4年了,所以可能新版本的Android、Flash Player等已经改变了一些东西,因此它可能不再起作用。现在Flash几乎已经从Web上消失了,所以已经不再是一个大问题了。 - FrancescoR

2
不,这是不可能的。在安卓上提供媒体播放的OpenCORE媒体库不支持.flv文件。
你可以在这里找到一个支持的媒体格式列表。这些格式在通用的安卓系统上都是支持的。在同一页中,你也能找到T-Mobile G1支持的一些额外格式。
当然,特定设备上可能会支持额外的媒体格式,但这会因设备而异。

HTC Hero有内置的Flash运行时,但不能播放独立的FLV文件。 - Christopher Orr
Nexus One手机似乎也预装了Flash 10.1,但我不知道它是否能播放独立的FLV文件。 - CommonsWare
这是不正确的。是的,这是可能的。我曾为一家公司工作,他们为自己的硬件构建了流媒体高清视频软件,可在iOS、Android和Web浏览器上查看,使用FLV格式。不幸的是,我不能分享代码,但我可以说这绝对是可行的。 - jungledev
那个回复是7年前的 :-). 我会假设在此期间已经可能了 :-). OpenCORE已经很久以前不再是Android上的媒体框架了。 - Stelian Iancu

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接