作者charlesdc (MoOn)
看板MacDev
标题Re: [问题] 播放高画质Youtube
时间Wed Mar 13 13:55:33 2013
※ 引述《benjenq (Ben(憋))》之铭言:
: 大家好:
: 新年快乐...
: 爬了一下本版的文( / 搜寻 Youtube) 找到了内嵌WebView播放Youtube的做法,
: 也实作出来了。
: http://apiblog.youtube.com/2009/02/youtube-apis-iphone-cool-mobile-apps.html
: 不过,在下找不到可以播放高画质的选项,
: 支援高画质的影片,透过这方式播出来的画面还是惨不忍睹
: (iPad 4 WIFI)。
: 想请问...这个问题有解吗?
因为工作上需要所以也微研究了一下
在YouTube api:
首先要先知道几件事
1.data api中提供你的link并不是实体档案的link
2.iOS device 不支援flash
在iOS device上播放youtube的方法:
1.利用openURL方式将网址带入透过开启内建的浏览器来浏览
2.透过UIWebView写内嵌方式的youtube
3.利用MPMoviePlayerController接youtube影片的实体连结
以上三种方法在iOS Device上的意义其实都是一样的,只是容器不同而已
用openURL是叫起Browser来拨放,UIWebView和MPMoviePlayerController
则是差别在不同class能做的事的差异,但其实影像档案来源都是一样的
怎麽发现?
可以由这位larcus94大大所写的class观察到一些事
https://github.com/larcus94/LBYouTubeView
在mobile上可以从整张网页去解析出实体影像的link
在Browser上可以透过fireBug去观察网路活动也会找到该link
但这组link在mobile上和在Browser上会长的些微不太一样
主要差异在itag这个标签
这标签是用来区分影像品质等级用的
在mobile上只有:18(高画质),36(低画质)
在Browser上有分:5 ,34 ,35 ,22 ,37
对应:240p,360p,480p,720p.1080p
看到这可能会感到很高兴,组出Browser高画质的link喂给iOS不就好了吗?
但事情不是憨人所想......
会区分成这样就是因为实体档案的影音编码是不相同的
Browser上的实体档案是.flv所以在不支援flash上的iOS Device也没有办法解析
所以以目前的规格上还是没有办法实现在iOS Device上拨放高画质的影片
但如果做在andriod就可以用上述方法
----------------------------------------------------------------------
後记:
是有看到一些付费软体有提供youtube高画质的功能,
他们可能是把.flv的影音编码给做进去,用Browser的link然後透过软体解码
或是他们是自己提供一个web服务,用自己的伺服器去做编码的方式把资料喂给client
-------------2013/3/27 update------------
今天在整理YouTube API资料写demo code时发现了另一种写法
它是上述第二种写法的延伸
透过YouTube API里面的 YouTube Player Tools - IFrame API
之前没发现是因为在认知中Player api是透过JavaScript控制SWFObject
而SWFObject是个flash元件所以在认知上就会觉得他无法work
但在IFrame API Overview 中写到:
The IFrame player API lets you embed a YouTube video player on your website
and control the player using JavaScript.
Unlike the Flash and JavaScript player APIs, which both involve embedding
a Flash object on your web page,the IFrame API posts content to an <iframe>
tag on your page.
This approach provides more flexibility than the previously available APIs
since it allows YouTube to serve an HTML5 player rather than a Flash player
for mobile devices that do not support Flash.
它会在不支援Flash的环境下跑HTML5的拨放器!
於是就可以透过 player.setPlaybackQuality(suggestedQuality:String) 的方式来设定
:D
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.218.8.238
1F:→ SicInfit:路过… 但即使是电脑上看也只有 480p 是 flv 或 webm 吧 03/14 01:52
2F:→ SicInfit:其它大小都有 mp4 的原始档案啊~ 03/14 01:54
4F:→ charlesdc:webm是你开启了html5版本才会看的link 03/14 13:05
5F:→ charlesdc:在上表中规格和quickTime能播的格式都可以播 03/14 13:06
6F:→ charlesdc:但重点就是差在如何产生出url的问题 03/14 13:06
7F:→ charlesdc:这目前我也还在研究 因为youtube app本身也能播到720p 03/14 13:07
8F:→ charlesdc:麻烦的是重要参数的部分有经过"编码"->搞定它才有办法 03/14 13:10
9F:→ SicInfit:你可以试试看 Chrome 的 HTML5 Video for YouTube 套件, 03/14 15:47
10F:→ SicInfit:或是 Safari 的 ClickToFlash,两个都有办法直接抓到原始 03/14 15:48
11F:→ SicInfit:档,大概可以研究一下它们是怎麽写的~ 03/14 15:48
13F:→ charlesdc:感谢提供方向,我目前也试朝这方面在找 03/14 16:24
14F:→ charlesdc:已经有抓到整个viedoInfo了,剩下就是解析的问题 03/14 16:25
15F:→ charlesdc:有点大包然後又有多层ASCII编码...... 03/14 16:25
17F:→ charlesdc:比较要注意的是它不是正规的API 哪时会改不知道 03/15 14:02
18F:→ Esvent:不好意思顺便借问一下 之前去查过apple的审查规则 03/15 14:35
19F:→ Esvent:上面好像说使用非公开的API会被reject 所以实务上还是可以 03/15 14:36
20F:→ Esvent:的吗? 最近有打算在程式内用google translate的发音api 03/15 14:38
21F:→ Esvent:不过它好像不是公开的API 不知道会不会被reject...囧 03/15 14:38
22F:→ uranusjr:As the saying goes, it's not illegal as long as you 03/15 15:15
23F:→ uranusjr:don't get caught. =p 03/15 15:15
24F:推 Blueshiva:Apple指的非公开API是指Apple自己的private API吧 03/15 15:32
25F:→ Esvent:原来如此,感谢两位的指点:D 03/15 15:41
※ 编辑: charlesdc 来自: 118.163.66.85 (03/27 11:55)
※ 编辑: charlesdc 来自: 118.163.66.85 (03/27 11:57)
※ 编辑: charlesdc 来自: 118.163.66.85 (03/27 12:00)