流式传输 Youtube 视频
Posted
技术标签:
【中文标题】流式传输 Youtube 视频【英文标题】:Streaming Youtube Videos 【发布时间】:2010-11-03 17:00:52 【问题描述】:我正在编写一个应用程序来使用流媒体播放 youtube 视频。
第一种方法:
我正在使用 GData API 获取视频的 RTSP URL。 这是播放 RTSP url 的代码。
VideoView mVideoView = new VideoView(this);
setContentView(mVideoView);
mVideoView.setVideoURI(Uri.parse("rtsp://rtsp2.youtube.com/CiILENy73wIaGQkDwpjrUxOWQBMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp"));
mVideoView.start();
但它在 G1 设备和模拟器上都会引发错误(模拟器有一些 根据邮件列表的防火墙问题) 这是错误信息
ERROR/PlayerDriver(35):命令 PLAYER_INIT 完成但出现错误或 信息 PVMFFailure
第二种方法:
获取 3gp 文件路径的 hack 方法 http://www.youtube.com/get_video?v=&t=&.. 获取文件路径后,我可以调用 setVideoURI 并播放 美好的。但这是实现要求的一种黑客方式。 我也检查了 Youtube 应用程序,它也有破解的方式来玩 youtube url。(用 logcat 检查)
我尝试从 VideoView 更改为 MediaPlayer,但错误没有改变。
有没有“干净”的方法来做到这一点?
请告诉我你的想法。
【问题讨论】:
您不能直接调用 YouTube 播放器来播放视频吗? (类似于 iPhone YouTube 应用的工作方式?) 你能解释一下这个黑客吗?我也面临同样的问题。 看看How to get thumbnail of YouTube video link using YouTube API? 有一个聪明的答案指出如何获取 rtsp url:试试这个作为例子:gdata.youtube.com/feeds/api/videos/… 如果你找到解决方案,请分享。 【参考方案1】:如果您愿意在新活动中完成这项工作,以下内容将在设备上工作,但在模拟器上无效:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
【讨论】:
这适用于设备,因为它安装了 youtube 应用程序。我不希望我的应用程序依赖于 Youtube 应用程序 有没有其他方法可以在没有 youtube 应用或设备不支持 flash 和 html5 的情况下播放 youtube 视频。【参考方案2】:有时 Uri.parse 返回“null”,因为无法解析 rtsp 协议而不是 http 协议。
使用 Log in logcat Uri.parse(rtspURL).toString()
查看它,您将看到没有任何内容。或者只制作Log.d("tag", Uri.parse);
,同样会返回。
尝试寻找另一种方法来解析(创建)一个 Uri。
我会尝试并运行:
String urlVideo = <your rtspURL>
VideoView video = (VideoView)findViewById(R.id.VideoView01);
Log.d(tag , urlVideo);
video.setVideoURI(Uri.parse(urlVideo));
MediaController mc = new MediaController(this);
video.setMediaController(mc);
video.requestFocus();
video.start();
mc.show();
【讨论】:
我对 android 上的视频流还很陌生。你能具体解释一下吗?【参考方案3】:让我印象深刻的是肮脏的方式完全有效!如果你有一个可行的解决方案,那就去吧。我认为目前还没有一种干净的方法可以让 RTSP 流在 SDK 中工作。
【讨论】:
【参考方案4】:我们遇到了一个非常相似的问题。
目前我正处于项目的第一步,我正在尝试让视频视图简单地工作。 我正在从这里获取数据:http://gdata.youtube.com/demo/,我正在测试所有视频链接。
RTSP 3GP 视频真的是非常低质量的视频......而且没有办法访问 mp4(高质量)视频。我真的不知道如何使它工作,因为我认为 MP4 流仅对高级开发人员可用....
【讨论】:
【参考方案5】:把目光投向Youtube API
我认为这也使用 youtube 应用程序(你不想要的)
但只要参考一下,你可能会找到解决它的一些关键
【讨论】:
【参考方案6】:我使用以下代码显示了 YouTube 视频。我希望它有用,但请告诉我如何改进它。
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.youtube.com/watch?v=...")));
public void onPrepared(MediaPlayer mp)
// TODO Auto-generated method stub
【讨论】:
此代码将启动默认的 youtube 播放器,这不是问题的要求【参考方案7】:视频上的标题表明它确实适用于 Android。所以,尝试一个好的视频链接来进行试验。这是我使用的一个:
rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov
我在 Nexus 和三星平板电脑上表现出色。
【讨论】:
【参考方案8】:您可以访问互联网吗? 如果没有,请在清单文件中添加 Internet 权限
<uses-permission android:name="android.permission.INTERNET" />
也请尝试以下 URI:
rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov
http://www.wowza.com/_h264/BigBuckBunny_175k.mov
【讨论】:
以上是关于流式传输 Youtube 视频的主要内容,如果未能解决你的问题,请参考以下文章
如何仅流式传输来自 YouTube 的视频的声音? [关闭]
如何在我的应用程序上仅流式传输来自 youtube 视频的音频数据?