【问题标题】:Is there a way to play .flv video files in android app? [closed]有没有办法在 android 应用程序中播放 .flv 视频文件? [关闭]
【发布时间】:2015-12-11 16:47:33
【问题描述】:

是否可以开箱即用或通过库?

【问题讨论】:

标签: android


【解决方案1】:

您可以在 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: 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 非常重要,否则当 Activity 不再可见时视频将继续播放(以及音频)。对此的信任转到评论中链接的 sliseshare 海报。谢谢!警告:这主要是一个黑客!请注意,事情可能无法按预期工作,或者将来可能会停止工作。顺便说一句,它对我来说效果很好。

【讨论】:

  • 虽然这可能会回答这个问题,但it would be preferable 在此处包含答案的更多重要部分,并提供链接以供参考。
  • 我将文章复制粘贴到了答案中。
  • 似乎不起作用。
  • 这段代码已有 4 年的历史了,因此可能是较新版本的 Android、Flash Player 等发生了更改,因此它不再工作了。 Flash 现在几乎从网络上消失了,所以没什么大不了的
【解决方案2】:

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

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

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

【讨论】:

  • HTC Hero 有一个内置的 Flash 运行时,但是它不能播放独立的 FLV 文件。
  • Nexus One显然也有Flash 10.1,但不知道能不能播放独立的FLV文件。
  • 这是不正确的。对的,这是可能的。我曾在一家公司工作,该公司为他们的硬件构建了流式高清视频软件,可以在 iOS、Android 和网络浏览器中查看,使用 FLV。可惜不能分享代码,但我可以说绝对可行。
  • 该回复来自 7 年前 :-)。我会假设同时它是可能的:-)。 OpenCORE 早已不再是 Android 上的媒体框架。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多