標籤

2019年10月4日 星期五

app中使用youtube的黑科技

黑科技對資訊人來說就好像武功密笈一樣
正規的教科書跟本就不會教這些

在進入這主題前,先聲明一下

不要用來幫 youtube 的影片 衝 觀看次數 人氣
Google 一定會發現,然後再把那個 yotuber 停權關掉

「心存善念,才能發揮黑科技的力量,而不會被黑暗吞噬掉

youtube上面有好多資源 ,最多人感興趣及每天都會使用的大概就是用來聽歌了

但是 Google 提供 youtube這個平台,就是要賺廣告費

所以要想在 手機背景聽歌 ,這是很多人的需求,但是 youtube就是想辦法不讓你這樣做
因為你就不會看到廣告了

那有沒有可能 用 app 包裝 youtube ,然後實現這個需求呢?

有的,就正規技術上來說,youtube允許你用它的 api來開發
但當它無預警的升級改版,你可能一夕之間又不能用
api要申請帳號,限制又多,一不小心超過免費的額度又可能每月被扣款

mb3就是使用 youtube的海量歌曲,成為很受歡迎的app
但是它仍然無法實現離線聽歌,背景聽歌等實用的功能

於是我嚐試不用 api 來開發測試
經過小小的努力,成功了

最簡單的做法,就是在 app 中,包裝網頁瀏覽器,然後再開啟 網站版的 youtube

想法很簡單,但實際包裝時,就遇上一些問題

android 和 iOS 要分別用不同的作法來達成

android 的作法


1.在畫面佈置的地方,選用 webview 元件來配置



2.在 程式開始處,也就是 onCreate() 里面,加入宣告,並指定 youtube 網址
我 mark 起來的地方,就是我若 使用 gl=tw 那個 也是不行的喔
直接用 "https://www.youtube.com/" 就對了

*****
要加上下面這行喔,不然就會跳離app了

ytwv.setWebViewClient(new WebViewClient() {
    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
});

*****
加這行是為了,不需要用手去點,就能播歌
WebSettings webSettings = ytwv.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    webSettings.setMediaPlaybackRequiresUserGesture(false);
}



3.加這行是為了不被廣告檔住,不然一進youtube, 整個畫面幾乎就被廣告佔據了



這時執行app應該就能,在app內用youtube搜尋,點播歌曲了

如果app有需要畫面空間做其他的事,可將 youtube 的畫面隱藏起來,歌照樣能聽喔

ytwv.setVisibility(View.GONE);

**********************************

iPhone的作法




iOS有二種網頁元件,記得採用舊版的元件,才能播放youtube 喔


    ytweb= [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 220.0, 320.0, 320.0)];
    ytweb.scrollView.scrollEnabled=YES;
    yt_url=@"https://www.youtube.com/";
    [self.view addSubview:ytweb];
    ytweb.allowsInlineMediaPlayback = YES;
    [ytweb loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[yt_url  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];


可將 youtube 的畫面隱藏起來,歌照樣能聽喔
  
  ytweb.hidden=true;

為了一開始不被廣告檔住, 可以指定位移


        if (ytweb.hidden) {
            ytweb.hidden=false;
            ytweb.scrollView.contentOffset = CGPointMake(0, 320);
        }
        else {
            ytweb.hidden=true;

        }

好了,這樣就可以在你的app中包裝入 youtube

直接用youtube就能搜尋,播歌了,然後又不影響你app的運作

如果想在app中實現下載 youtube成為mp3的歌曲,然後出國時省頻寬,離線聽歌的話
也辦的到,但需要另外一些技巧
以python 解析 youtube 搜尋結果
再整合 youtube-dl 來下載 影片提取音源,
最後 再以 ffmpeg 把 webm格式,轉為 mp3格式

當歌曲下載為mp3之後,純背景,不開手機畫面就能聽歌就成理所當然的事了。



沒有留言:

張貼留言