在 Android 应用程序中播放 YouTube 视频

2024-02-13

在我的 Android 应用程序中,我希望用户点击一次图像,自动播放 YouTube 视频,视频播放完毕后,用户立即返回到应用程序。在 Android 中执行此操作的最佳方法是什么?

我尝试使用意图。这是有效的,因为视频出现在我认为是 YouTube 网页上。但是播放视频需要再次点击。如果可能的话我想避免这种情况。

我尝试了整个 MediaPlayer、prepareAsync、setOnPreparedListener 但从未让它工作。由于某种原因,onPrepared 从未被调用。没有抛出任何异常。我正在使用模拟器进行测试,而且我是 Android 新手,所以我不确定物理设备上的行为是否会有所不同。

通过利用网络视图发挥创意,我在 iOS 上运行得很好。我希望它在 Android 上更简单。这docs http://developer.android.com/guide/topics/media/mediaplayer.html确保听起来直截了当。

Cheers!


Update:下面的一切仍然是正确的,但是适用于 Android 的官方 YouTube API https://developers.google.com/youtube/android/player/现在可用。

到目前为止,在 Android 上播放 YouTube 视频的最简单方法是简单地触发 Intent 来启动本机 Android YouTube 应用程序。当然,如果您使用的不是经过认证的 Google 设备,并且没有 Google 应用程序的补充,那么此操作将会失败。 (Kindle Fire 可能是此类设备的最大例子)。这种方法的问题在于,当视频结束时,用户不会自动返回到您的应用程序。他们必须按“后退”按钮,此时您可能已经丢失了它们。

作为第二个选项,您可以使用 MediaPlayer API 播放 YouTube 视频。但这种方法有三个注意事项:

1) 您需要调用 YouTube 的 GData Webservice API,并向其传递视频 ID。您将返回大量元数据,以及应传递给 MediaPlayer 以播放 H.264 编码流的 RTSP URL。这可能是您尝试使用 MediaPlayer 失败的原因;您可能没有使用正确的 URL 进行流式传输。

2) GData/MediaPlayer 方法将仅播放低分辨率内容(176x144 或类似)。这是 YouTube 为防止内容被盗而深思熟虑的决定。当然,这并不能提供非常令人满意的体验。有一些后门黑客可以获取更高分辨率的流,但并非所有版本的 Android 都支持它们,使用它们违反了 YouTube 的服务条款。

3) RTSP 流可能会被某些内部网络/防火墙阻止,因此此方法可能不适用于所有用户。

第三个选项是在您的应用程序中嵌入 WebView。您可以在这里采取两种方法:

1) 您可以嵌入 Flash 对象并运行 YouTube 的标准桌面 Flash 播放器。您甚至可以使用 Javascript API 来控制播放器,并将事件转发回本机 Android 应用程序。这种方法效果很好,但不幸的是,Flash 在 Android 平台上已被弃用,并且不适用于 Android 4.1 及更高版本。

2)您可以嵌入一个<video>标记通过 HTML5 播放 YouTube。不同版本的 Android 对此的支持有所不同。在Android 4.0及以上版本上运行良好;早期版本的 HTML5 有些参差不齐<video>支持。因此,根据您的应用程序必须支持的 Android 版本,您可以采用混合方法,在 Android 4.x 或更高版本上嵌入 HTML5,并在所有早期版本的 Android 上嵌入 Flash。

StackOverflow 上有多个关于使用 HTML5 播放 YouTube 视频的主题;它们都没有真正描述您必须在一个地方遵循的整个过程。以下是其中一些的链接:

Android - 如何在 WebView 中播放 Youtube 视频? https://stackoverflow.com/questions/9565533/android-how-to-play-youtube-video-in-webview?rq=1

如何在 Android 上的 WebView 中嵌入 YouTube 剪辑 https://stackoverflow.com/questions/3458765/how-to-embed-a-youtube-clip-in-a-webview-on-android

在 Android WebView 中播放 Youtube HTML5 嵌入视频 https://stackoverflow.com/questions/6323169/play-youtube-html5-embedded-video-in-android-webview

在接下来的几周/几个月里,所有这一切都将变得更加容易;在 Google I/O 2012 上,他们展示/演示了适用于 Android 的新 YouTube API,该 API 将支持在您的应用程序中直接嵌入 YouTube 内容,并完全支持 Android 2.2(截至撰写本文时,约占 Android 用户群的 95%)。它到达得不够快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 应用程序中播放 YouTube 视频 的相关文章

  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐