2022年4月20日水曜日

motionのログで

 ログを見ていて秒の表示がないので、バグ仕様だと思ってたんですが、よくよく見てみると秒の表示もある行があった。

[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_strm: Starting camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_strm_ntc: Started camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_ctrl: Starting webcontrol on port 8080
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_ctrl: Started webcontrol on port 8080
[0:motion] [NTC] [ENC] [Apr 19 23:39:21] ffmpeg_global_init: ffmpeg libavcodec version 58.91.100 libavformat version 58.45.100
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] translate_init: 言語:英語
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] motion_start_thread: カメラID: 1は /etc/motion/BSW20KM11BK.confから設定されています.
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] motion_start_thread: カメラID: 1カメラ名: Eデバイス: /dev/v4l/by-id/usb-KYE_Systems_Corp._USB_Camera_200901010001-video-index0
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] main: スレッドの終了を待っています、pid: 1445
[1:ml1:E] [NTC] [ALL] [ 4月 19 23:39:] motion_init: カメラ 1が開始しました:モーション検出 有効化
[1:ml1:E] [NTC] [VID] [ 4月 19 23:39:] vid_start: V4L2デバイスを開く

気づくのは日本語と英語。トランスレーションバグか…と思い早速ja.poを見てみるものの、さすがに"%b %d %H:%M:%S"を変換している部分はなかった。

なのでソース(src/logger.c)を見ていると…

static char *str_time(void)
{
    static char buffer[16];
    time_t now = 0;

    now = time(0);
    strftime(buffer, 16, "%b %d %H:%M:%S", localtime(&now));
    return buffer;
}

確かに英語圏では月の略称は3文字で「Apr 19 23:39:21」すが、その他の言語だと残念なことになりそうな気配。どんなコード形態で扱っているのは不明ですが、結果を見ると「 4月 19 23:39:」と2文字足りてないので「月」が結構容量食っている感じです(当社比2倍w)。

試しにバッファをおおきくしてリビルドしてみましょうかね。

static char *str_time(void)
{
// % b is not always 3 characters 16 -> 32
//static char buffer[16];
static char buffer[32];
time_t now = 0;

now = time(0);
//strftime(buffer, 16, "%b %d %H:%M:%S", localtime(&now));
strftime(buffer, 32, "%b %d %H:%M:%S", localtime(&now));
return buffer;
}

リビルド…どこからやればいいのかわからないので、make cleanから
autoreconf -fiv
./configure
make
make install

[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_strm: Starting camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_strm_ntc: Started camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_ctrl: Starting webcontrol on port 8080
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_ctrl: Started webcontrol on port 8080
[0:motion] [NTC] [ENC] [Apr 20 18:48:47] ffmpeg_global_init: ffmpeg libavcodec version 58.91.100 libavformat version 58.45.100
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] translate_init: 言語:英語
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] motion_start_thread: カメラID: 1は /etc/motion/BSW20KM11BK.confから設定されています.
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] motion_start_thread: カメラID: 1カメラ名: Eデバイス: /dev/v4l/by-id/usb-KYE_Systems_Corp._USB_Camera_200901010001-video-index0
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] main: スレッドの終了を待っています、pid: 11880
[1:ml1:E] [NTC] [ALL] [ 4月 20 18:48:47] motion_init: カメラ 1が開始しました:モーション検出 有効化
[1:ml1:E] [NTC] [VID] [ 4月 20 18:48:47] vid_start: V4L2デバイスを開く 

はい、完了。
抜本的にはバグレポする必要がありそうだし、linuxのこの手の文字コードの手順ってどうするんでしょう?

と言うよりも、英語設定なのに日本語変換されているのが問題だったりするんだがw

0 件のコメント:

コメントを投稿