Twitter DateTime Rewriter でTweet ID(status ID)からの投稿時刻取得に対応したので手順を書いておきます。
公式ドキュメント によると、Twitterでは2011年9月30日からsnowflakeという技術に基づいてIDが振られるようになりました。
このIDは時刻情報を含んでいる為、IDから直接投稿時刻を取得することが出来ます。
snowflakeは ○twitter/snowflake - GitHub でソースが公開されています。
それによると、左から(上位ビットから数えて)42ビットが時刻情報、5ビットがデータセンターID、5ビットがワーカーID、12ビットがシーケンス番号となっています。
(READMEには41ビットが時刻情報と書いてあり、先頭1ビットは符号という説もある。ただしTwitter IDs, JSON and Snowflake | Twitter Developersには64bit unsigned integerとの記述あり。本質的にはSystem.currentTimeMillis()を22ビット左にシフトさせた値)
また、この時刻情報は、Unixタイム(ミリ秒)から1288834974657を減算した値となっています。
ちなみにこの1288834974657(変数名twepoch)は日本時間だと2010年11月4日 10:42:54に相当します。
(減算しているのは恐らく2038年問題(桁あふれ)を先送りする為)
従って、この64ビットのIDから時刻を取得するには、22ビット右にシフトさせ、1288834974657を加算すればUnixタイム(ミリ秒)が得られます。
※JavaScriptでの注意点1
JavaScriptは、処理系によっては53ビットを超える数値を正確に扱えません。
例えばFirefox9.0.1では
console.log(10765432100123456789) とすると
10765432100123458000
と表示されます。
10765432100123456789:1001010101100110011111110111010100010101011100100011010100010101
10765432100123458000:1001010101100110011111110111010100010101011100100011100111010000
この場合は上位ビットに影響はない為、時刻に関しては恐らく問題ありません。
※JavaScriptでの注意点2
JavaScriptのビットシフト演算子は32ビットの値にしか対応していません。
これはECMAScriptの仕様です。
2進数文字列にして処理する、等の手間が必要です。
参考:
○Twitter Engineering: Announcing Snowflake
○Twitter IDs, JSON and Snowflake | Twitter Developers
○twitter/snowflake - GitHub
コメント(0)| Track back(0) | 2012-01-13 17:58:20
[web]
|
Twitter DateTime Rewriterの更新版を公開しました。
Twitterのメッセージ投稿時刻を、「約何時間前」等の相対表示から絶対表示に書き換えるGreasemonkeyユーザースクリプトです。
●詳細・インストール
[更新内容]
・モバイル向けサイトに対応
・PC向けサイトのリニューアルに一応対応
JavaScript無効だとPC向けサイトが使い物にならなくなったので、モバイル向けサイトに対応しました。
PC向けサイトも動作するように修正しましたが、現状JavaScript有効下では実質的に意味が無いです。
モバイル向けサイトは時刻情報が含まれていないので、APIを使わない限り無理だと思って放置していましたが(ちなみにPC向けサイトで時刻情報が無くなった時はAPIを使って時刻を取得していました)、tweet ID(status ID)から時刻を計算できることが分かったので勢いで実装。
コメント(0)| Track back(0) | 2012-01-13 16:14:30
[web]
|
ブラウザ用検索プラグイン、Yahoo!検索(リアルタイム)を公開しました。
検索バーにYahoo!検索(リアルタイム)を追加します。
当然非公式です。
Firefox用ですが、OpenSearch対応ブラウザであれば使えるかもしれません。
●詳細・インストール等
コメント(0)| Track back(0) | 2012-01-13 15:55:10
[web]
|
ブラウザ用検索プラグイン、Google翻訳 英→日 を公開しました。
検索バーにGoogle翻訳(英日翻訳)を追加します。
当然非公式です。
Firefox用ですが、OpenSearch対応ブラウザであれば使えるかもしれません。
●詳細・インストール等
多分探せばあるだろうけど、探す前に作ってしまったのだから仕方がない。
英語でコメントを書く際に、機械翻訳で日本語としてきちんと翻訳できれば英語としても意味は取れるだろう、という魂胆で英日翻訳の方をよく使います。
日英翻訳が欲しい人は、パラメーターを弄ってください。
多分slとtlの中身を入れ替えれば日英翻訳になるはず。
コメント(0)| Track back(0) | 2012-01-10 11:54:20
[web]
|
DeletePagerizeの更新版を公開しました。
AutoPagerizeで追加読込されたページを削除するGreasemonkeyユーザースクリプトです。
●詳細・インストール
[更新内容]
Greasemonkeyメニューから"Delete mid-pages"を実行した際に正常に動作しなくなっていた問題を修正
数ヶ月前のFirefoxかGreasemonkeyの更新で発生した不具合の修正です。他に現在私が把握している不具合情報はありません。
コメント(0)| Track back(0) | 2012-01-03 08:19:00
[web]
|
LATUMAPICを更新しました。
コミックマーケット81対応。
サークルカット画像のサークル名部分を統一フォントで上書きし、カタログブラウザの可読性を高めます。
[解説]
サークルカット画像内のサークル名は、サークル毎にフォントや表示位置が異なり、カタログチェックのスピードを下げる大きな要因の一つです。
LATUMAPICは、サークル名をサークル名表示枠内に統一フォントで上書きし、認識スピードの向上を支援します。
●詳細・ダウンロード
[更新内容]
・C81対応
・マルチスレッド対応
・ディレクトリ選択ダイアログの応答高速化
・エラー発生時にエラーログを保存可能に
・実行時UI無効化
・処理終了時チェックボックス可否の修正
等
[例]
使用フォント:MS UI Gothic ボールド
参考:
論理2コア環境下での性能比
[旧バージョンとの比較]
・1スレッド時 1.285倍
・2スレッド時 2.25倍
・3スレッド時 2.204倍
[1スレッドと複数スレッドの比較]
・1スレッド時 1.0倍
・2スレッド時 1.75倍
・3スレッド時 1.714倍
CDATAごと将来廃止されそうで怖い
DBから直接読まないと駄目っぽい
コメント(0)| Track back(0) | 2011-12-13 02:25:00
[自作プログラム関係]
|
経緯:
・2011年12月時点で現行のVLC1.1系はHTTP Live Streaming(HLS)に対応していない。VLC1.2系で対応予定。
(ナイトリービルドではバグあり。バグの影響を受けないものは再生可能かもしれない。このままいくと多分正式リリース版でも直らない気がする)
・比較的最近のFFmpegはHLS対応しているので、FFmpegで読み込みパイプ経由でVLCで再生すればよい。
具体的には以下のようなコマンドを実行。(実際は各exeはフルパスで指定する必要あり。以下同様)
ffmpeg.exe -i "http://www.example.com/livestream.m3u8" -vcodec copy -acodec copy -f mpegts pipe: | vlc.exe -
ところが実際に試してみると、上記コマンドで一応再生すること自体はできるものの、一時的にネットワークに負荷が掛かったりした場合、ネットワークが回復した後でもメディア・セグメントの欠落が頻発して全く実用レベルではなかったり。
当初はFFmpeg側の先読み・バッファリング処理の不具合を疑いましたが、色々自作したりしてみた結果、パイプの出力がVLC側で処理されるまで(メディア・セグメントの再生実時間?)ブロックが発生して、FFmpeg側の処理が止まっているらしいことが判明。
ということで、パイプの入出力をバッファリングして、FFmpegの出力時にブロックが発生しないようにすればOKです。
そのためのアプリケーションが(ry
作りました。
●nbpipebuffer.pl(要Perl)
使い方:
冒頭のコマンドは以下のようになります。
ffmpeg.exe -i "http://www.example.com/livestream.m3u8" -vcodec copy -acodec copy -f mpegts pipe: | perl.exe nbpipebuffer.pl | vlc.exe -
注意:
Windowsの場合、明示的にperl.exeを指定する必要があります。
(Windows側の問題です。最近のWindowsでは直っているかも)
参考:
オプションの追加
FFmpegのログレベルを指定してログメッセージを減らし、VLCのオプションを指定して再生終了時にVLC終了、最前面表示、コントロール非表示、を設定
ffmpeg.exe -i "http://www.example.com/livestream.m3u8" -vcodec copy -acodec copy -f mpegts pipe: -v warning | perl.exe nbpipebuffer.pl | vlc.exe --play-and-exit --video-on-top --qt-minimal-view -
FFmpegのWindowsバイナリは
●Zeranoe FFmpeg builds(旧HawkEye builds)
が便利です。
コメント(0)| Track back(0) | 2011-12-05 14:27:10
[その他]
|
AviUtlでH.264のAVIファイルを開いて再圧縮無しで編集する為には、H.264のコーデックが必要です。
例えば x264vfw とか。
一般的にAviUtlでH.264を扱う際は、x264.exeと拡張x264出力(GUI)Exとその他たくさんが必要と説明されることが多いですが、単純にH.264コーデックのAVIファイルをキーフレーム単位の編集で再圧縮無しで出力するだけなら、x264vfwを使うだけでOKです。
(基本的に拡張x264出力(GUI)Ex等はMP4出力等の為のものです。)
x264vfwは、x264のエンコーダーとFFmpegのデコーダーを組み合わせたコーデックです。
同様に
XviDのAVIファイルを再圧縮無しで編集する為には Xvid のコーデックが必要で、
DivXのAVIファイルを再圧縮無しで編集する為には DivX のコーデックが必要です。
ちなみに、AviUtlでMP4ファイルを再圧縮無しで編集する為には、MP4Pluginが必要です。(他にコーデック等は不要)
ただし、MP4Pluginの公式な配布元は消滅しています。
コメント(0)| Track back(0) | 2011-11-03 15:34:20
[その他]
|
前回の続き
HLS対応のVLC1.2開発版はまだバグがあってツイキャスは再生出来ないので、FFmpegを経由してVLC1.1系で再生を試みる。
FFmpegの出力を標準出力にして、パイプでVLCに渡すだけのお手軽仕様。
ffmpeg.exe -i http://ja.twitcasting.tv/ユーザーID/metastream.m3u8/?video=1 -vcodec copy -acodec copy -f mpegts pipe: -v warning | vlc.exe -
-v warning オプションでコマンドプロンプトのメッセージを減らす。
quietだと全部消えます。
詳細はFFmpegのマニュアルでloglevelの所を参照。
ライブ終了時の再接続は出来ず、毎回コマンドを打つ必要があり不便ですが、Flash版より圧倒的にCPU負荷が低かったりボリュームを上げたり出来る点が利点。
コメント(0)| Track back(0) | 2011-10-29 10:23:40
[web]
|
FirefoxとFlashの相性は最悪なので、ブラウザを使わないでツイキャスのライブ配信を見ることは出来ないか、という趣旨の話。
・HTML5版(HTTP Live Streaming版、iOS版)
非Flash版。
公開されている標準仕様(まだ策定中)を使っているので、HTTP Live Streamingに対応しているソフトを使えば再生可能。
ただしH264とAACのcodecが必要。
ちなみにFirefoxはHTTP Live Streamingに対応する予定はある(もう対応しているかもしれない)が、(MPEG LAがライセンスを緩和しない限り)H264には対応する予定は無いと明言されている。
ただしWindows7以降ならばMSがFirefox用のH264プラグインを提供すると言う話もあるので、結果的に再生可能になるのかもしれない。
対象URLは
http://ja.twitcasting.tv/ユーザーID/metastream.m3u8/?video=1
このURLはツイキャスの開発APIのページで公開されており、動作は保証されている、と思って良い。
Windowsでは例えばFFmpegに付いているFFplayで再生可能。
ただしFFplayは純粋に視聴用のプレーヤーではないので不便ではあるし、そもそも一般向けとは言い難い。
みんな大好きVLCは次版の1.2で対応するが、現在の開発版は相対パスの解釈に問題があり、ツイキャスのライブは再生出来ない。
・Flash版
Flash版は独自仕様でライブ配信を実現している為、一般的な(汎用的な)ソフトでは再生出来ない。
そのため、FlashをFlashのスタンドアローン・プレーヤーで再生するのが簡単。
(余談ではあるがFlash Media Serverのライセンスが安ければ、多少は一般的なRTMP系を使っていたのではないかと思う。)
Flashのスタンドアローン・プレーヤーはAdobeが配布している。
●Adobe - Flash Player アップデータ
(プロジェクターがスタンドアローン・プレーヤー)
対象URLは
http://twitcasting.tv/swf/livestreamer.swf?user=ユーザーID&lang=ja&mute=0&cupdate=0
(ja.twitcasting.tv でも可)
これはツイキャス・ライブを外部サイトに埋め込んだ場合と同様であり、停止状態でスタートし、画面上にロゴが表示される。
このパラメーターはツイキャスの開発APIのページで公開されており、動作は保証されている、はずである。
ロゴを非表示にする為には、
http://twitcasting.tv/swf/livestreamer.swf?user=ユーザーID&lang=ja&mute=0&cupdate=0&seed=1
のようにseedパラメーターを付加する。
この動作は保証されておらず、将来的に変更される可能性がある。
(本来seedパラメーターは認証に使われる。今のところロックされていないライブではseed等の検証をしていない模様なので、何か値が設定されていれば良い)
HTML5版は動画のサイズが自動的に反映されるが、Flash版はオリジナルのサイズを知ることはできない模様。
(一般的に音声配信は画像サイズが大きい)
HTML5版のライブを保存する場合は、FFmpegを使えば拍子抜けするほど簡単に保存できる。
ファイル単位のHTTP通信なので、自分でソフトを作るにしてもそう難しくはない。
標準化万歳。
一方Flash版のライブは独自仕様であるため専用ソフトが必要。(あるの?)
そもそも動画ファイルを転送しているわけではないので面倒。
各フレームの画像と音声を転送している模様。
クライアント側で絵と音の同期を取っていない気がする。音がずれると戻らないし。
コメント(0)| Track back(0) | 2011-10-25 10:50:20
[web]
|