エコノミー時、キャッシュに通常画質の完全な動画があれば優先して読み込んでほしい

203 views
Skip to first unread message

logic...@gmail.com

unread,
Aug 19, 2017, 1:17:14 AM8/19/17
to MnMn-Forum
一般会員でニコニコ動画を視聴しています。
現在の仕様だと、既に通常画質の動画がキャッシュされている場合でも再生時には低画質の動画を読み込んでいるので、
例えば、休日にご飯食べたらすぐ見るためにあらかじめ午前中にキャッシュしても、食べ終わった正午過ぎだと無意味になってしまいます。
エコノミーモードの時間帯において、既に通常画質の完全な動画があればそちら再生するようにしてほしいです。
ご検討の程、よろしくお願いいたします。

sk ☃#QQ

unread,
Aug 19, 2017, 5:20:49 AM8/19/17
to MnMn-Forum, logic...@gmail.com
あらー、まじですか。
実装初期段階に組んだきり手を付けてなかったので今どうなってるかまでは把握してませんでした
ロジック見る限り動いてそうなんですが調査必要ですね。

例えば、休日にご飯食べたらすぐ見るためにあらかじめ午前中にキャッシュしても、食べ終わった正午過ぎだと無意味になってしまいます。

どれくらいの時間を空けていますか。

さらにその状況になる際の動画設定ファイルをいただけないでしょうか。
キャッシュの対象動画IDディレクトリの中にある <動画ID>-setting.json が動画設定ファイルになります。

logic...@gmail.com

unread,
Aug 19, 2017, 8:58:48 AM8/19/17
to MnMn-Forum, logic...@gmail.com
本来実装されているはずの機能が正しく動いていなかったのですね。


どれくらいの時間を空けていますか。

取得を開始したのが11時10分頃、再生したのが12時30分頃です。
だいたい1時間強ですね。
 

さらにその状況になる際の動画設定ファイルをいただけないでしょうか。
キャッシュの対象動画IDディレクトリの中にある <動画ID>-setting.json が動画設定ファイルになります。

 ファイル添付の方法が分からなかったので、中身を直接貼付する形で失礼します。
  • so31771214-setting.json
{
  "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoIndividualVideoSettingModel, MnMn",
  "LoadedNormal": false,
  "LoadedEconomyMode": false,
  "ConvertedSwf": false,
  "DmcItems": {
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn]], mscorlib",
    "[archive_h264_700kbps_360p]-[archive_aac_128kbps]": {
      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": true,
      "Length": 190926441,
      "Video": "archive_h264_700kbps_360p",
      "Audio": "archive_aac_128kbps"
    },
    "[archive_h264_600kbps_360p]-[archive_aac_64kbps]": {
      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": true,
      "Length": 166257591,
      "Video": "archive_h264_600kbps_360p",
      "Audio": "archive_aac_64kbps"
    }
  },
  "LastShowTimestamp": "2017-08-19T16:15:21.6608173+09:00",
  "Filtering": {
    "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringSettingModel, MnMn",
    "Items": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringItemSettingModel, MnMn]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    },
    "IgnoreOverlapWord": false,
    "IgnoreOverlapTime": "00:00:03",
    "DefineKeys": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[System.String, mscorlib]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    }
  },
  "IsEnabledGlobalCommentFilering": true
}

ちなみに、今同じ動画を再生してみても、低品質の動画が読み込まれていました。

sk ☃#QQ

unread,
Aug 19, 2017, 8:28:52 PM8/19/17
to MnMn-Forum, logic...@gmail.com
(私の方では so31771214 を視聴できないのでちょいと想像による部分もあります)

期間的にはキャッシュ破棄ではなさそうですね。

頂いた動画設定を見る限りだとそもそもエコノミー・通常画質ともダウンロードしていない感じで
DMCでダウンロードしているようです。
DMCの場合エコノミーとか通常画質の区分けは存在しない状態です(低ビットレートがエコノミーとするならそうかもしれませんが)。

今のキャッシュディレクトリ内で以下の二つはどうなってますか。
  1. 事前に取得した非エコノミーで再生したい動画のファイル名
  2. その後再生するとエコノミーで再生される動画のファイル名
多分 1. しかないんじゃないですかね。

logic...@gmail.com

unread,
Aug 19, 2017, 10:28:02 PM8/19/17
to MnMn-Forum, logic...@gmail.com

今のキャッシュディレクトリ内で以下の二つはどうなってますか。
  1. 事前に取得した非エコノミーで再生したい動画のファイル名
  2. その後再生するとエコノミーで再生される動画のファイル名
多分 1. しかないんじゃないですかね。

それぞれ、
  1. so31771214-video.[archive_h264_700kbps_360p]-[archive_aac_128kbps].dmc.mp4
  2. so31771214-video.[archive_h264_600kbps_360p]-[archive_aac_64kbps].dmc.mp4
というファイル名です。動画ファイル2つキャッシュディレクトリに入っています。

logic...@gmail.com

unread,
Aug 19, 2017, 11:19:24 PM8/19/17
to MnMn-Forum, logic...@gmail.com
旧型式で取得・再生を試したところ、こちらは通常画質の動画が読み込まれました。
DMCの場合、明確な区分けが無いため動画が再取得されてしまうんでしょうか。
そうなりますと、「DMC形式使用時において、より品質の良い動画が既にキャッシュされていれば優先して読み込んで欲しい」という要望になります。


確認は以下のような手順で行ないました。(誰でも視聴できる動画で試してみました。)
  1. DMC形式の使用を無効
  2. (so30413239)2017/08/20 10:47に取得開始
  3. (so30413239)2017/08/20 11:12に再生 →旧型式:通常画質が読み込まれた
  4. DMC形式の使用を有効
  5. (so31563521)2017/08/20 11:32に取得開始
  6. (so31563521)2017/08/20 11:50に再生 →DMC形式:[archive_h264_1000kbps_540p]-[archive_aac_192kbps]が読み込まれた
  7. DMC形式の使用を無効
  8. (so30413239)2017/08/20 12:01に再生 →旧型式:通常画質が読み込まれた
  9. DMC形式の使用を有効
  10. (so31563521)2017/08/20 12:02に再生 →DMC形式:[archive_h264_600kbps_360p]-[archive_aac_64kbps]の取得が開始された

■so30413239-setting.json
{
  "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoIndividualVideoSettingModel, MnMn",
  "LoadedNormal": true,

  "LoadedEconomyMode": false,
  "ConvertedSwf": false,
  "DmcItems": {
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn]], mscorlib"
  },
  "LastShowTimestamp": "2017-08-20T12:01:16.1606534+09:00",

  "Filtering": {
    "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringSettingModel, MnMn",
    "Items": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringItemSettingModel, MnMn]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    },
    "IgnoreOverlapWord": false,
    "IgnoreOverlapTime": "00:00:03",
    "DefineKeys": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[System.String, mscorlib]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    }
  },
  "IsEnabledGlobalCommentFilering": true
}

■so31563521-setting.json
{
  "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoIndividualVideoSettingModel, MnMn",
  "LoadedNormal": false,
  "LoadedEconomyMode": false,
  "ConvertedSwf": false,
  "DmcItems": {
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn]], mscorlib",
    "[archive_h264_1000kbps_540p]-[archive_aac_192kbps]": {

      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": true,
      "Length": 209015529,
      "Video": "archive_h264_1000kbps_540p",
      "Audio": "archive_aac_192kbps"

    },
    "[archive_h264_600kbps_360p]-[archive_aac_64kbps]": {
      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": false,
      "Length": 121506557,

      "Video": "archive_h264_600kbps_360p",
      "Audio": "archive_aac_64kbps"
    }
  },
  "LastShowTimestamp": "2017-08-20T12:01:49.1235388+09:00",

  "Filtering": {
    "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringSettingModel, MnMn",
    "Items": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringItemSettingModel, MnMn]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    },
    "IgnoreOverlapWord": false,
    "IgnoreOverlapTime": "00:00:03",
    "DefineKeys": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[System.String, mscorlib]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    }
  },
  "IsEnabledGlobalCommentFilering": true
}

  1. 事前に取得した非エコノミーで再生したい動画のファイル名
  2. その後再生するとエコノミーで再生される動画のファイル名
■so30413239
  1. so30413239.mp4


■so31563521
  1. so31563521-video.[archive_h264_1000kbps_540p]-[archive_aac_192kbps].dmc.mp4
  2. so31563521-video.[archive_h264_600kbps_360p]-[archive_aac_64kbps].dmc.mp4

sk ☃#QQ

unread,
Aug 20, 2017, 7:34:31 AM8/20/17
to mnmn-...@googlegroups.com, logic...@gmail.com
詳しい状況説明かなり助かります。

DMCの場合、明確な区分けが無いため動画が再取得されてしまうんでしょうか。
 
今保持しているキャッシュ情報とは異なるため DMC に対しては再取得という形になります。
もともと取得ソースで区分けしたかったのですが困ったことに最上位品質というのは
サービス側でいくらでも変更できるため使用者側からでは判断できないので諦めました。

そうなりますと、「DMC形式使用時において、より品質の良い動画が既にキャッシュされていれば優先して読み込んで欲しい」という要望になります。

上記の理由で避けていたのですが一部決めつけで対応可能です。
以下の A-E 群を決めつけにより並べ替えたイメージです。
  1. A. [video_2000kbps_540p]-[audio_192kbps]
  2. B. [video_2000kbps_540p]-[audio_64kbps]
  3. C. [video_1000kbps_540p]-[audio_192kbps]
  4. D. [video_500kbps_540p]-[audio_64kbps]
  5. E. [video_499kbps_540p]-[audio_192kbps]
画質と音声による品質が分かれていますがまずは画質を優先し、そのあとに音声でソートするイメージです。
この場合 A,B は直感的で C も分かりやすいのですが、
D, E が実際のところどうなのって感じになります(例に挙げた品質が現実的かどうかはともかく)。
もし低品質を保持しており、高品質を取得可能であればこの条件のもとに取得、
高品質を保持しており、低品質が提供された場合はこの条件のもとにキャッシュを使用するということです。

これでいいなら課題起票しますがどうでしょうか。

logic...@gmail.com

unread,
Aug 20, 2017, 8:11:45 AM8/20/17
to MnMn-Forum, logic...@gmail.com

上記の理由で避けていたのですが一部決めつけで対応可能です。
以下の A-E 群を決めつけにより並べ替えたイメージです。
  1. A. [video_2000kbps_540p]-[audio_192kbps]
  2. B. [video_2000kbps_540p]-[audio_64kbps]
  3. C. [video_1000kbps_540p]-[audio_192kbps]
  4. D. [video_500kbps_540p]-[audio_64kbps]
  5. E. [video_499kbps_540p]-[audio_192kbps]
画質と音声による品質が分かれていますがまずは画質を優先し、そのあとに音声でソートするイメージです。
この場合 A,B は直感的で C も分かりやすいのですが、
D, E が実際のところどうなのって感じになります(例に挙げた品質が現実的かどうかはともかく)。

体感ですが、2つのキャッシュを比較して画質・音質の一方だけ高品質というのは無かった思うので、
提示された決めつけによるソートでも条件として十分と考えます。
 
もし低品質を保持しており、高品質を取得可能であればこの条件のもとに取得、
高品質を保持しており、低品質が提供された場合はこの条件のもとにキャッシュ使用というとことです。

これでいいなら課題起票しますがどうでしょうか。

自分の要望は満たされますので、この条件でご対応をお願いいたします。

sk ☃#QQ

unread,
Aug 20, 2017, 10:16:40 AM8/20/17
to MnMn-Forum, logic...@gmail.com
体感ですが、2つのキャッシュを比較して画質・音質の一方だけ高品質というのは無かった思うので、
提示された決めつけによるソートでも条件として十分と考えます。

DMC配信対応時の調査でも多分ないと思ってるんですけど思いだけの根拠しかなく
サービス側のやることはいつどうなるか分からないので、今後もしそういう提供ソースがあれば潔く諦めてください。

本件 課題起票しました: https://bitbucket.org/sk_0520/mnmn/issues/748

 以上。

sk ☃#QQ

unread,
Aug 21, 2017, 8:53:41 AM8/21/17
to MnMn-Forum, logic...@gmail.com
本件てけとーに対応したので次回リリースに取り込みました。

ではではー。

logic...@gmail.com

unread,
Aug 24, 2017, 7:43:42 AM8/24/17
to MnMn-Forum, logic...@gmail.com
バージョン:0.84.0.39096-320be4951324caca1a20a84c846491619e486916 にて、
キャッシュ済みの高品質動画が読み込まれなかったので、その報告をさせていただきます。

現在、2種類の動画がキャッシュされている状態です。
  1. sm31793378-video.[archive_h264_1000kbps_480p]-[archive_aac_192kbps].dmc.mp4
    • 2017/08/24 10:12に、「ご飯食べたらすぐ見る」で取得した動画キャッシュ
  2. sm31793378-video.[archive_h264_600kbps_360p]-[archive_aac_64kbps].dmc.mp4
    • 2017/08/24 18:15に、該当動画を再生した際に取得された動画キャッシュ
■sm31793378-setting.json
{
  "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoIndividualVideoSettingModel, MnMn",
  "LoadedNormal": false,
  "LoadedEconomyMode": false,
  "ConvertedSwf": false,
  "DmcItems": {
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn]], mscorlib",
    "[archive_h264_1000kbps_480p]-[archive_aac_192kbps]": {

      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": true,
      "Length": 214256920,
      "Video": "archive_h264_1000kbps_480p",

      "Audio": "archive_aac_192kbps"
    },
    "[archive_h264_600kbps_360p]-[archive_aac_64kbps]": {
      "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoDmcItemModel, MnMn",
      "IsLoaded": true,
      "Length": 123385836,

      "Video": "archive_h264_600kbps_360p",
      "Audio": "archive_aac_64kbps"
    }
  },
  "LastShowTimestamp": "2017-08-24T20:20:19.319437+09:00",

  "Filtering": {
    "$type": "ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringSettingModel, MnMn",
    "Items": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[ContentTypeTextNet.MnMn.MnMn.Model.Setting.Service.Smile.Video.SmileVideoCommentFilteringItemSettingModel, MnMn]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    },
    "IgnoreOverlapWord": false,
    "IgnoreOverlapTime": "00:00:03",
    "DefineKeys": {
      "$type": "ContentTypeTextNet.Library.SharedLibrary.Model.CollectionModel`1[[System.String, mscorlib]], ContentTypeTextNet.SharedLibrary",
      "$values": []
    }
  },
  "IsEnabledGlobalCommentFiltering": true
}

20:33分現在も、該当動画を再生すると2の動画が読み込まれます。
ただ、1の動画が完全な動画データかの判断が自分では出来ないので、
「キャッシュ < DMC 提供ソース」の条件に引っかかって、2が読み込まれているだけの可能性はあります。

他に必要な情報がありましたら、提供いたしますのでお教えください。
ご対応の程、よろしくお願いいたします。

sk ☃#QQ

unread,
Aug 24, 2017, 10:44:29 AM8/24/17
to MnMn-Forum, logic...@gmail.com
ダメでしたか、、、残念。
デバッグの焦点が既存挙動を壊さないことだったので本機能のデバッグが甘かった本末転倒な感じすかね。

一連の処理手順をログ出力してもらえますか。
ログは↓のどちらかで出力できます
  1. <MnMn>\bat\log.bat を実行 (MnMn 終了まで)
  2. MnMn -> ログ -> ログを継続出力 (再度 ログを継続出力 をクリックするか MnMn 終了まで)


logic.

unread,
Aug 25, 2017, 5:28:42 AM8/25/17
to MnMn-Forum, logic...@gmail.com
別動画(sm31806717)での、取得から各時間帯での再生までのログと動画設定ファイルになります。

大まかな流れとしては、以下のようになります。
  1. sm31806717 を「ご飯食べたらすぐ見る」で取得(2017/08/25 17:04)
  2. sm31806717 を再生、取得済み動画が読み込まれた(2017/08/25 17:30頃)
    • sm31806717-video.[archive_h264_2000kbps_720p]-[archive_aac_192kbps].dmc.mp4
  3. sm31806717 を再生、エコノミー動画の取得が開始(2017/08/25 18:04)
    • sm31806717-video.[archive_h264_600kbps_360p]-[archive_aac_64kbps].dmc.mp4

2017-08-25_17-03-19-RELEASE.log
sm31806717-setting.json

sk ☃#QQ

unread,
Aug 25, 2017, 10:28:06 PM8/25/17
to MnMn-Forum, logic...@gmail.com
ログと諸々の情報ありがとうございます。

キャッシュのチェックまでは進んでいますがそこから判定がうまいこといってない感じです。
課題の再開で対応します。

sk ☃#QQ

unread,
Aug 25, 2017, 11:59:13 PM8/25/17
to MnMn-Forum, logic...@gmail.com
判定処理がダメでした。
直しましたので次回リリースに取り込みました。

logic.

unread,
Aug 26, 2017, 1:47:54 AM8/26/17
to MnMn-Forum, logic...@gmail.com
キャッシュ済みの高品質動画が読み込まれたのを確認しました。
(バージョン:0.84.1.25298-551f36ba2c5cc71a2d9686d43721477072d2dc4a)

この時、プレイヤー下部のロールオーバー情報が反映されてなかったので、
こちらの方も反映していただけるとありがたいです。
リリースしてからの報告になってしまい申し訳ありません。

sk ☃#QQ

unread,
Aug 26, 2017, 2:07:41 AM8/26/17
to MnMn-Forum, logic...@gmail.com
確認どうもです。

すいません、漏れまくりですね。

別件やってるのでちょっと後回しになるかもしれませんが追々対応しておきます。
Reply all
Reply to author
Forward
0 new messages