---
# System prepended metadata

title: 嘗試使用ai2做出android radio APP與失敗原因

---

# 嘗試使用ai2做出android radio APP與失敗原因

![](https://i.imgur.com/iA9OU7d.png)


![](https://i.imgur.com/4Pd4XMA.png)
## 概念
### 困境
    台灣網路電台的協定是走 "mms://" 的方式
![](https://i.imgur.com/QlFhTtF.png)
這時候就會遇到一個問題了，首先MS是連接Windows Media單播服務的默認方法，而Windows Media是用於windows vista 到 windows 7之間的默認影音撥放程式，而現在已經沒有了，是因為他太老舊了，所以很多已經不支援了，相對MMS也就不怎麼支援了，那問題困難點就來了，mms沒有辦法直接解析，因為他會不斷一直丟片段音檔，而且使用UDP方式，所以程式內沒有對應的程式，基本上就沒有辦法解析資料，如果是用android studio寫的話，可以參考 https://changyy.pixnet.net/blog/post/31675147 這篇文章。

  看回來ai2的部分，首先遇到的問題是player與web方式撥放差別，
  ai2中文學習往解釋player的部分:
  ```
  Player 元件可播放聲音或影像檔，或使裝置震動。Player 元件為一非可視元件，可播放聲音或影像檔和控制震動手機。
  ```
而webview的是:
```
非可視元件，可提供 HTTP GET, POST, PUT 以及 DELETE 等功能。
```
那player就是可以撥放任何為mp3或mp4的檔案，但是僅限於前者提到的檔案格式，以外一律不行，所以如果我的網址輸入後得到的檔案不為兩者，那他就無法撥放，而mms得到的通常會有其他資料而不是乾淨完整的mp3，所以電台這就行不通。
那web的形式呢，很可惜又直接的，mms並不是http協定，所以不能讀取。那如果從網頁爬內碼的連結呢，那會牽扯到很多東西
>第一個:ai2並不能去使用API第三方API，也就是很多東西會無法使用
>第二個:ai2官方有寫可以使用的額外資料([參考這](https://puravidaapps.com/extensions.php))，但是還是沒有可以解析MMS協定的方法

所以ai2的擴充性與相容性並沒有到很高，那如果是走http的網路電台是否可以使用呢?

答案是可以的，我使用的是[飛特電台](http://phate.io/)，他是一個動漫電台，但裡面很多是有版權的音樂，所以要特別注意一下。上方連結點進去因該是會看到有內容的網站沒錯，但是官方有提供一組網址叫[http://phate.io/listen](http://phate.io/listen) ，應該會看到的是一個mp3的串流資料，那個就是能夠使用的資料。

那既然得到一組可以串流的mp3網址，那拿回去ai2裡面的player理論上就是能用了，事實上測試後確實是能用的，那mp3可以用那web應該也是能使用的，也確實是可以正常使用的沒問題，那player的大致使用確定了以後，那還剩web的部分，到底能使用多少種的東西來撥放音樂。

最簡單的方式是使用youtube，畢竟是最大的影音平台，直接放出來是沒有問題的，但是這時候遇到了一個大問題了，手機版的網頁讀取YouTube不會自動撥放與影片預設是靜音，自動撥放還算好解決([請參考此篇](https://support.google.com/youtube/answer/171780?hl=zh-Hant#zippy=%2C%E8%87%AA%E5%8B%95%E6%92%AD%E6%94%BE%E5%85%A7%E5%B5%8C%E5%BD%B1%E7%89%87)) 我們只需要在網址後面加上&autoplay=1即可完成自動撥放，自動撥放問題解決了，剩下自動靜音的問題，可以使用API來解決或者使用PHP來解決，但是API在前面敘述已經提過，ai2並沒有辦法使用，那只剩PHP的方式，但是ai2的web並不能使用內嵌的方式，假設我自行設計一個簡易網站的話，那是沒問題的，但是就已經超出使用ai2的方式了，因為那是使用網站處理完然後APP直接顯示而已，所以php的方式並沒有辦法使用。

那既然都這樣很多辦法都不行，但是我無意間發現一個法式貌似可以([請參考此篇](https://jbprogramnotes.com/2021/05/%E4%BD%BF%E7%94%A8-app-inventor-%E6%92%AD%E6%94%BE-youtube-%E9%9F%B3%E6%A8%82/))。

有一個API他是可以先自行去找到那個影片的下載位置(下載位置是API資料的)，得到後再去用內碼找到mp3的網址，再拿得到的網址按照上方的方式使用player撥放，這是沒問題的。

於是我去測試看看了兩個東西，一個是播放清單，另一個是直播內容，因為像是警察廣播頻道的網路電台是直接放在youtube於是我也順便一起測試，但很不幸的都失敗，但是沒有很意外，因為API通常是先得到已經儲存起來的YouTube內容再去使用爬蟲技術之類的方式抓資料下來給使用者，但是像是撥放清單，得到的內容並不是影片而是清單，而API不認識，所以理所當然沒辦法，而直播內容則是用串流的形式，所以沒有固定的內容，所以沒有辦法實時抓取，所以也會失敗，既然都不行，那就只能把我現在能想到的解決方式與成功的內容放上來。

### 成功的內容

於上方敘述所示，成功的僅有直接撥放youtube與可串流且是走http協定的mp3資料，
所以我在snipper裡面放上兩個選項一個為飛特電台的另一個就是youtube。

下方有兩個按鈕一個是start另一個是END，END會直接關掉內容，可以按start重新開始，基本上就只有這樣，但是無意間有試成功的是，player可以讓程式於背景放著撥放，所以還是有一個可以於背景撥放。

## 結論

ai2雖然擴充性與相容性都不高，但是還是可以用基本的方法去做出一個功能，網路上有使用ai2製作台灣的網路電台與網路音樂播放都不多，所以寫簡單的文章概述僅此，本人研究沒有太深，所以有任何問題或者錯誤請與我聯絡(mail : yxiao940@gmail.com)
製作人:阿雷(楊)