Androidでピアキャスを見る 7 VPN編
今までは3Gを利用してピアキャスをみるために不特定のグローバルIPに対してprivateを許可していましたが、このやり方では直下でリレー上限が無視されるなど予想以上に問題があることがわかってきました。安全のため、可能な方はできるだけVPNを利用した接続に切り替えてください。VPNを使うと3Gからでもローカル接続としてアクセスできるようになります。(auは2011年末からPPTPによるVPN接続が可能)
これから説明するVPN接続の前提条件として、Peercastが動作しているPCのOSがWindows7 Pro以上、ルータはPPTPに対応したものでなければなりません。 PPTP対応ルータについてはここ、XPの方はこのあたりを参考にしてください。
1.Androidの設定
2.Windowsの設定
3.Peercastの設定
4.ルータとファイアウォールの設定
Androidの設定
メニューの設定を選択
無線とネットワークを選択
VPN設定を選択
VPNの追加を選択
PPTP VPNを追加を選択
VPN名:この接続の名前
VPNサーバの設定:PCのグローバルIP
暗号化を有効にする:有効にしない(Android側の理由により暗号化すると接続できません)
作成されたVPN接続を選択する
ネットワークに接続を選択
VPN用に作成したユーザ名とパスワード(後述)を入力し接続
接続に成功するとVPNアイコンが表示され、ローカルIPでpeercastに接続できるようになります。(別端末からの接続なのでログイン画面が表示される)
マルチアカウントに対応したtumblr画像reblogツール
OAuthを利用して複数アカウントにreblogできるようになったdomblrcoのテスト版です。
ブラウザアクション(アイコンをクリックしたときに出るポップアップメニュー)の「add account」でログイン中のアカウントを追加できます。2つ以上のアカウントを追加する場合はこれを繰り返してください。
APIv2を利用するためprivateの投稿ができなくなりました。
※利用上の注意
テスト版です。
既にあるdomblrcoはアンインストールするか無効にしてください。
ダウンロード:domblrco_multi_account.crx
cavetube配信アプリ テスト版2
Androidから配信したい旨を説明したところサイト側で対応してくれました!感謝!
ということで、テスト配信もできるようになったCaveCastです。
03/18
配信設定で画質「きれい」または「なめらか」を設定できるようになりました。
03/19
コメントの投稿と取得ができなくなっていたのを修正しました。
05/04
カメラが複数ある端末に対応(未チェック)
設定画面がメニューキーから呼び出し可能になりました。
仕様変更によりコメントが投稿できなくなっていたのを修正しました。
ダウンロード:CaveCast.apk
cavetube配信アプリ テスト版
cavetube向けAndroid配信アプリCavaCastを実験中。
1.CavaCastのダウンロード
下記リンクからCavaCastをダウンロードしてインストールします
CavaCast.apk
2.配信用FMSアドレスの取得
Androidの標準ブラウザを起動してPCのときと同じように配信を開始し
外部エンコーダを使った配信という項目からFMSのURLをクリップボードにコピーします。
(画面はPCのものです)
3.配信開始
CaveCastを起動してbroadcastアイコンをタップし
FMSのURLを入力する項目に先ほどコピーしたアドレスを貼り付けて配信を開始します。
(クリップボードにコピーしてあれば自動的に入力されます)
4.コメントの取得
CaveCastはコメントを取得できますが、配信IDを自動的に取得する方法がないので一覧から選択する方式になっています。つまりテスト配信のコメントは取得できません。配信一覧に載るまでに配信開始から最大で1分ほどかかる場合があります)
5.コメントの投稿
tweetアイコンからコメントを書き込めます。ツイッターには投稿しません。
tumblrのarchiveページでスクロールとともに上から自動消去
tumblrのarchiveページは画像が大量に表示されると重くなってくるので増えてきたら自動で削除したい。昔autopagerizeで同じことを試みたが表示上の問題で失敗に終わった。しかしこちらは表示位置が絶対座標なので問題なし!
以下ソースコード
(function() {
setInterval(function(){
var elms = document.getElementById("content").getElementsByTagName("a");
for(var i=0;i<elms.length-500;i++){
elms[i].parentElement.removeChild(elms[i]);
}
},20000);
})();
ダウンロード:tumblr_archive_autoremove.user.js
UserScriptなのでchromeなどではリンクをクリックするかダウンロードしたファイルをブラウザにドラッグドロップするとインストールできます。
ピアキャスで受信が終了したチャンネルの一括削除
ピアキャストで配信を見ているといつのまにかチャンネルが大量に増え、peercast.exeを終了しても一覧に残っていることがあります。そこでテンプレートを改造し、受信していないチャンネルを全て停止するリンクを作成しました。
ピアキャストの不思議な仕様対策メモ
- ピアキャストのhtmlテンプレートにjavascriptを記述するには、特殊文字{を{{としなければならない
- 外部jsを呼び出す際に拡張子がjsだと開けない
- chromeを使用してXMLHttpRequestでxmlにアクセスするとresponseXMLがエラーになる
このあたりに注意して作成したのがこちら
relays.html
<html> <head> ...略... <script src="stopall.js.html"></script> </head> <body> ...略... <a href="javascript:void(0);" onClick="stopAllChannel()">全て停止</a> ...略... </body> </html>
stopall.js.html
function stopAllChannel(){{
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://127.0.0.1:7144/admin?cmd=viewxml", true);
xhr.onreadystatechange = function() {{
if(window.DOMParser){{
if(xhr.responseText.indexOf("</peercast>")>0){{
var domParser = new DOMParser();
var dom = domParser.parseFromString(xhr.responseText, "application/xml");
onDocument(dom);
xhr.abort();
}
}else{{
if (xhr.readyState == 4 && xhr.status == 200){{
onDocument(xhr.responseXML);
}
}
}
xhr.send();
}
function onDocument(dom){{
var channels_relayed = dom.getElementsByTagName("channels_relayed")[0];
var channels = channels_relayed.getElementsByTagName("channel");
for(var i=0;i<channels.length;i++){{
var relay = channels[i].getElementsByTagName("relay")[0];
var status = relay.getAttribute("status");
if(status!="RECEIVE" && status!="BROADCAST"){{
var id = channels[i].getAttribute("id");
stopChannel(id);
}
}
alert("受信していないチャンネルを全て終了しました");
}
function stopChannel(id){{
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://127.0.0.1:7144/admin?cmd=stop&id="+id, true);
xhr.send();
}
2012/03/03 追記
停止が完了する前にリロードしてしまっていたのでリロードしないように修正しました。
ダウンロード:IM0043_html.zip
野良アプリに自動更新のような機能を実装する
アプリ起動中に更新チェックとapkファイルのダウンロードを行い、インストール画面を表示する方法。
公式マーケットのようにユーザーの操作を一切必要とせずアプリを更新するものではありません。
動作としてはAdobe AIRの自動更新に近いものです。
まずはバージョンチェック用のxml
バージョン情報と最新版apkファイルのurlを記載します 。
<?xml version="1.0" encoding="utf-8"?>
<update>
<versionCode>4</versionCode>
<versionName>1.2</versionName>
<url>http://myserver.net/update.apk</url>
<description><![CDATA[
test
]]></description>
</update>
自動更新したいアプリ本体のソースはだいたい以下のようになります。最新版apkと上記xmlをサーバにアップロードしてupdateXmlUrlに指定。
public class AutoUpdateTestActivity extends Activity implements AutoUpdateEventListener {
private final String updateXmlUrl = "http://myserver.net/update.xml";
private Handler handler;
private Updater updater;
public void onCreate(Bundle savedInstanceState) {
handler = new Handler();
//1.更新チェック
updater = new Updater(this, updateXmlUrl);
updater.updateCheck();
}
@Override
public void onUpdateAvailable() {
//2.アップデートダイアログの表示
handler.post(new Runnable() {
@Override
public void run() {
showUpdateDialog();
}
});
}
private void showUpdateDialog(){
new AlertDialog.Builder(this)
.setTitle("Update")
.setIcon(R.drawable.ic_launcher)
.setMessage("Update available")
.setPositiveButton("Update",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//3.ダウンロード開始
updater.downloadApk();
}
})
.setNegativeButton("Cancel", null)
.show();
}
@Override
public void onUpdateApkDownloadComplete() {
//4.インストール
handler.post(new Runnable() {
@Override
public void run() {
updater.installApk();
}
});
}
public void onDestroy() {
//5.テンポラリファイルの削除
updater.deleteTempApkFile();
}
}
Updaterは長いので一部抜粋。
アプリのversionCodeとversionNameを取得
PackageManager pm = activity.getPackageManager(); String packageName = activity.getPackageName(); PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_META_DATA); int versionCode = packageInfo.versionCode; String versionName = packageInfo.versionName;
更新用xmlからversionCodeとversionName、apkファイルのurlを取得
HashMap<String, String> map = new HashMap<String, String>();
InputStream is = new URL(updateXmlUrl).openConnection().getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DocumentBuilderFactory document_builder_factory = DocumentBuilderFactory.newInstance();
DocumentBuilder document_builder = document_builder_factory.newDocumentBuilder();
Document document = document_builder.parse(bis);
Element root = document.getDocumentElement();
if(root.getTagName().equals("update")){
NodeList nodelist = root.getChildNodes();
for (int j=0;j<nodelist.getLength();j++){
Node node = nodelist.item(j);
if(node.getNodeType()==Node.ELEMENT_NODE){
Element element = (Element) node;
String name = element.getTagName();
String value = element.getTextContent().trim();
map.put(name, value);
}
}
int versionCode = Integer.parseInt(map.get("versionCode"));
String versionName = map.get("versionName");
String updateApkUrl = map.get("url");
}
apkファイルのダウンロード
URL url = new URL(updateApkUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
File cacheDir = getExternalCacheDir();
File tempApkFile = File.createTempFile("apk", ".apk", cacheDir);
FileOutputStream os = new FileOutputStream(tempApkFile);
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = is.read(buffer)) > 0 ) {
os.write(buffer, 0, bufferLength);
}
os.close();
is.close();
インストール画面の表示
Intent intent = new Intent(Intent.ACTION_VIEW); Uri dataUri = Uri.fromFile(tempApkFile); intent.setDataAndType(dataUri, "application/vnd.android.package-archive"); startActivity(intent);
AutoUpdateEventListenerやその他細かい部分はソースをダウンロードしてください。エラー処理などはかなり適当です。それとインストール用のapkファイルを本体側に保存するとなぜかインストールできませんでした。AndroidManifest.xmlが読み込めないとか何とか・・・。
ソースダウンロード: AutoUpdateTest_src.zip
Androidでピアキャスを見る 6
この度Android Peca Testはバージョン2.0になりました。
主な変更点
- お気に入りなどチャンネル一覧をタブ形式に
- メニューの追加(更新とローカル/グローバルの変更)
Android Peca Test 2.0 β のダウンロード
バージョン2.1で次の機能が追加されました。
- 自動更新機能
- フィルタのインポート機能
ファイル入出力のため今回のアップデートでSDカード権限が追加されています。
こちらのインポートデモからPecaRecorderやpcypListのフィルタ(お気に入り)をインポートできます。
Android Peca Test 2.1 β のダウンロード
バージョン2.2でYPを追加できるようになりました。これに伴いキャッシュサーバを利用する機能は削除されています※。3G回線で視聴する場合はVPN接続に切り替えてください。VPN接続中は自宅PC経由のアクセスになるためYP取得時ポートが開放された状態になります。(VPNの接続方法はこちら)
※2.1以前のバージョンの方はまだ少しの間利用できますが、そのうち利用できなくなります
Android Peca Test 2.2 のダウンロード
Androidでピアキャスを見る 5 現状まとめ
androidでpeercastを視聴する人が増えてきたので表にまとめました
| Peercast IM版 | ─いいえ─ | |
| │ はい │ |
||
| YPを追加したい | ─いいえ─ | |
| │ はい │ |
||
| vMPlayerを使う | ─いいえ─ | |
| │ はい │ |
||
※PecaIndexの視聴アプリ設定でAndroidPecaを選択
PeercastIM+vMPlayerの場合はPecaIndexのみで視聴できます。
PeercastVPやVPlayerを使う場合はAndroidPecaが必要。(VPlayerやその他大抵のプレイヤーはmms://でなければ再生できずリレーを開始することができないため)
peercast本体の設定
03/27 追記
localhost以外からリレーを開始するにはPrivateを許可する必要がありますが、配信したり直下になったりするとリレー上限が無視されるようです。3Gのために全IP(255.255.255.255)を許可するのは危険なので、ローカルのみの利用が無難。どうしても外で見たい場合はVPNなどを利用してください。
windows用のtumblr画像バックアップアプリ 2
tumblr画像バックアップアプリにpost情報を表示するビュワーを追加しました。
バックアップされた画像ファイルをビュワーにドラッグ&ドロップすると説明文(キャプション)が表示されます。画像ラベルやキャプションのリンクから記事を開くことができます。
※実行にはjavaランタイムが必要です。
すでに利用されている方はzipを展開してできたファイルをすべて既存のフォルダへ上書きコピーしてください。
12/23 一部画像がエラーで表示できない問題を修正しました
ダウンロード:tumblr_photo_backup.zip























