【Titanium Mobile】新しいアプリを作成しました
今回はリモートの音声データをストリーミング再生、またはダウンロードして保存するアプリを作成しました。音声データは今後どんどん追加されていきますが、新着データがあればトップ画面を表示中にTwitterクライアントみたいに勝手に追加されていきます。
TEDみたいな感じで、回線状況に関係なく再生したい方はダウンロード、ちょっと聴いてみたい方はストリーミングを選べるようになっています。ダウンロードしたデータはプレーヤー画面のスライダーを操作して好きなところから再生することができます。
Titanium Mobileで苦労したところはこの再生画面で、最終的にはTitanium Mobile自体に手を入れてしまいました。プラグインにしてもよかったのですが、それは今後の課題です。簡単な変更で動画プレーヤーの実装が楽になるので、これは実装してほしいんですけどねえ。
Titanium Mobile側の変更は以下の通り:
diff --git a/iphone/Classes/TiMediaVideoPlayerProxy.m b/iphone/Classes/TiMediaVideoPlayerProxy.m
index 93cd37c1..3ad7116 100644
--- a/iphone/Classes/TiMediaVideoPlayerProxy.m
+++ b/iphone/Classes/TiMediaVideoPlayerProxy.m
@@ -660,6 +660,11 @@ NSArray* moviePlayerKeys = nil;
}
}
+-(void)setCurrentPlaybackTime:(NSNumber*)time
+{
+ [movie setCurrentPlaybackTime:[time doubleValue]];
+}
+
-(NSNumber*)currentPlaybackTime
{
ONLY_IN_3_2_OR_GREATER(currentPlaybackTime)
@@ -1172,4 +1177,4 @@ NSArray* moviePlayerKeys = nil;
@end
これでスライダー付きの動画プレーヤーが簡単にできちゃうんですが、実は困ったことに1.8系からは現在の再生時間をこれまでと1,000倍も違うミリ秒単位で返すようになったので、スライダ部分は今後は更新が必要になります。地味に嫌な仕様変更です。
音声再生中にsetIntervalしたobserverが再生状況をみてスライダーを同期させるので、手で触ってスライダーを動かしたのと区別する必要があります。そこでtouchstartイベントを取得して、終わったらtouchendで解放するようにしました。
###
playerはTi.Media.createVideoPlayerしたオブジェクト
progressはTi.UI.createProgressBarしたオブジェクト
###
moved_by_user = false
progress.addEventListener('touchstart', (e)->
moved_by_user = true
return
)
progress.addEventListener('touchend', (e)->
slider_value = e.value
if player.duration
to = parseInt(player.duration * (slider_value / 100))
player.setCurrentPlaybackTime(to)
moved_by_user = false
return
)
observer = ()->
if moved_by_user == false
if player.currentPlaybackTime > 0
current_time = player.currentPlaybackTime
val = current_time / player.duration * 100
progress.value = val
return
timer = setInterval(observer, 1000)
こんな感じで実装しました。フォーワンファースト社のみなさん、辛抱強くお付き合い頂きありがとうございました。
Popularity: 1% [?]

ぐっどうぃる博士の音ライブラリ
