Re: [問題] 播放高畫質Youtube

看板MacDev作者 (MoOn)時間12年前 (2013/03/13 13:55), 編輯推噓1(1024)
留言25則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/14 01:52, , 1F
路過… 但即使是電腦上看也只有 480p 是 flv 或 webm 吧
03/14 01:52, 1F

03/14 01:54, , 2F
其它大小都有 mp4 的原始檔案啊~
03/14 01:54, 2F

03/14 13:03, , 3F

03/14 13:05, , 4F
webm是你開啟了html5版本才會看的link
03/14 13:05, 4F

03/14 13:06, , 5F
在上表中規格和quickTime能播的格式都可以播
03/14 13:06, 5F

03/14 13:06, , 6F
但重點就是差在如何產生出url的問題
03/14 13:06, 6F

03/14 13:07, , 7F
這目前我也還在研究 因為youtube app本身也能播到720p
03/14 13:07, 7F

03/14 13:10, , 8F
麻煩的是重要參數的部分有經過"編碼"->搞定它才有辦法
03/14 13:10, 8F

03/14 15:47, , 9F
你可以試試看 Chrome 的 HTML5 Video for YouTube 套件,
03/14 15:47, 9F

03/14 15:48, , 10F
或是 Safari 的 ClickToFlash,兩個都有辦法直接抓到原始
03/14 15:48, 10F

03/14 15:48, , 11F
檔,大概可以研究一下它們是怎麼寫的~
03/14 15:48, 11F

03/14 15:50, , 12F
用 Chrome 直接播 mp4、原始檔選單:http://cl.ly/NZiH
03/14 15:50, 12F

03/14 16:24, , 13F
感謝提供方向,我目前也試朝這方面在找
03/14 16:24, 13F

03/14 16:25, , 14F
已經有抓到整個viedoInfo了,剩下就是解析的問題
03/14 16:25, 14F

03/14 16:25, , 15F
有點大包然後又有多層ASCII編碼......
03/14 16:25, 15F

03/15 14:01, , 16F

03/15 14:02, , 17F
比較要注意的是它不是正規的API 哪時會改不知道
03/15 14:02, 17F

03/15 14:35, , 18F
不好意思順便借問一下 之前去查過apple的審查規則
03/15 14:35, 18F

03/15 14:36, , 19F
上面好像說使用非公開的API會被reject 所以實務上還是可以
03/15 14:36, 19F

03/15 14:38, , 20F
的嗎? 最近有打算在程式內用google translate的發音api
03/15 14:38, 20F

03/15 14:38, , 21F
不過它好像不是公開的API 不知道會不會被reject...囧
03/15 14:38, 21F

03/15 15:15, , 22F
As the saying goes, it's not illegal as long as you
03/15 15:15, 22F

03/15 15:15, , 23F
don't get caught. =p
03/15 15:15, 23F

03/15 15:32, , 24F
Apple指的非公開API是指Apple自己的private API吧
03/15 15:32, 24F

03/15 15:41, , 25F
原來如此,感謝兩位的指點:D
03/15 15:41, 25F
※ 編輯: 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)
文章代碼(AID): #1HG1JN2X (MacDev)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1HG1JN2X (MacDev)