在Android应用中播放Youtube视频

8
在我的Android应用程序中,我希望用户点击一次图像后,Youtube视频会自动播放,并且当视频结束时,用户将立即返回应用程序。在Android中如何实现这一点是最好的方法?
我尝试使用意图(intents),虽然视频出现在我认为是YouTube网页上,但这种方法可以工作。但是播放视频需要另一个点击操作。如果可能的话,我想避免这种情况。
我尝试了整个MediaPlayer、prepareAsync、setOnPreparedListener等方法,但从未成功过。由于某种原因,onPrepared从未被调用。没有抛出任何异常。我正在使用模拟器进行测试,并且我对Android还很陌生,因此不确定行为在物理设备上是否会有所不同。
通过在iOS上使用webviews,我成功地解决了这个问题。我希望在Android上更加简单明了。docs确实让它听起来很直截了当。
干杯!
1个回答

29

更新:以下所有内容仍然正确,但是官方YouTube Android API现已推出。

到目前为止,在Android上播放YouTube视频最简单的方法是通过启动本机Android YouTube应用程序来触发Intent。当然,如果您不在拥有Google应用程序补充的认证Google设备上(例如Kindle Fire可能是这种设备的最大例子),则此方法将失败。这种方法的问题在于,当视频结束时,用户不会自动回到您的应用程序;他们必须按下返回按钮,此时您可能已经失去了他们。

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

1)您需要调用YouTube的GData Web服务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) 你可以通过HTML5嵌入<video>标签来播放YouTube。这在不同版本的Android中支持程度有所不同。它在Android 4.0及更高版本上运行良好;早期版本的HTML5 <video>支持有些不稳定。因此,根据您的应用程序必须支持的Android版本,您可以采取混合方法,在Android 4.x或更高版本上嵌入HTML5,并在所有早期版本的Android上使用Flash。

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

Android - 如何在WebView中播放Youtube视频?

如何在Android WebView中嵌入YouTube剪辑

在Android WebView中播放Youtube HTML5嵌入式视频

在未来几周/几个月内,所有这些都将变得更加容易;在2012年的Google I/O大会上,他们展示了一个新的YouTube API for Android,支持直接嵌入YouTube内容到你的应用程序中,并且完全支持Android 2.2及以上版本(截至本文撰写时,约占95%的Android用户)。它不能够快速到达。

@Giuilo - 在我们的应用程序中,如果没有安装Flash,我们会退回到使用GData/MediaPlayer API。这比黑屏更好。 - mportuesisf
2
@SundayMonday - 这是Google展示他们新的YouTube API的会议视频:http://www.youtube.com/watch?v=3WFsx-u-q3Y&list=PL4C6BCDE45E05F49E&index=6&feature=plpp_video - mportuesisf
1
@Giulio - 这里是展示“后门”黑客攻击的代码:http://keyeslabs.com/joomla/blogs/i-think-im-becoming-an-android/51-polish-your-app-free-embeddable-android-youtube-activity。它使用了GData/MediaPlayer API方法,并且是这种技术的一个很好的示例代码。后门的方面是它获取了格式代码18,这是高分辨率流的URL。我认为这种方法的问题是,上次我尝试时(很久以前),它适用于Android 2.1,但在Android 2.2上无法使用。今天你的结果可能会有所不同。 - mportuesisf
@mportuesisf 非常感谢!我看到代码使用了get_video的YouTube URL,但现在已经不支持了。代码的新版本(可以在Google Code上找到http://code.google.com/p/android-youtube-player)使用`get_video_info`来解决格式问题,但我担心即使是对这些URL的支持也可能会被取消而没有通知。然而,在等待易于使用的API部署的同时,如果代码能够正常工作,那么它可能是Flash播放器和GData/`VideoView`/`MediaPlayer`之间的一个不错的补充,后者的质量可能仅仅低了一点点,而这是我所需要的。 - Giulio Piancastelli
@Guilio - 感谢您提供更新的代码示例。我可能会继续使用混合GData/Flash/HTML 5方法,因为我已经在这方面投入了很多精力。等到Google发布他们真正的API时再全部更换。 - mportuesisf
显示剩余2条评论

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