tor4kichi / Hohoema

Windows10向けニコニコ動画プレイヤー
GNU General Public License v3.0
74 stars 10 forks source link

【2023/11/1】動画配信へのモバイル画質削除、及び超低画質追加への対応 #961

Open tor4kichi opened 9 months ago

tor4kichi commented 9 months ago

元記事:https://blog.nicovideo.jp/niconews/205042.html

11/1以降に投稿された動画から、モバイル向け画質(360p)が超低画質(144p)に置き換えられた状態で配信されるようになります。

11/1以前の動画は影響を受けないようです。

Hohoemaにおいては表示用画質の判定周りに依存コードがあるかもしれないので一度チェックしておいたほうがいいかもしれません。

tor4kichi commented 8 months ago

超低画質時、音質を指定していないせいか最低音質が選ばれている様子。

音質もユーザーが指定できるようにする?

tor4kichi commented 8 months ago

https://www.nicovideo.jp/watch/so42997483

{
    "ads": null,
    "category": null,
    "channel": {
        "id": "ch2589908",
        "name": "シーサイドチャンネル",
        "isOfficialAnime": false,
        "isDisplayAdBanner": false,
        "thumbnail": {
            "url": "https:\/\/secure-dcdn.cdn.nimg.jp\/comch\/channel-icon\/128x128\/ch2589908.jpg?1699531210",
            "smallUrl": "https:\/\/secure-dcdn.cdn.nimg.jp\/comch\/channel-icon\/64x64\/ch2589908.jpg?1699531210"
        },
        "viewer": {
            "follow": {
                "isFollowed": false,
                "isBookmarked": false,
                "token": "7a703ec5fff66c87818b91b63e0892cd5af37b03",
                "tokenTimestamp": 1699602842
            }
        }
    },
    "client": {
        "nicosid": "1672718598.87345287",
        "watchId": "so42997483",
        "watchTrackId": "glNYzmqwq0_1699602842437"
    },
    "comment": {
        "server": {
            "url": "https:\/\/nvcomment.nicovideo.jp\/legacy\/api\/"
        },
        "keys": {
            "userKey": ""
        },
        "layers": [
            {
                "index": 0,
                "isTranslucent": false,
                "threadIds": [
                    {
                        "id": 1699418944,
                        "fork": 1,
                        "forkLabel": "owner"
                    }
                ]
            },
            {
                "index": 1,
                "isTranslucent": false,
                "threadIds": [
                    {
                        "id": 1699418945,
                        "fork": 0,
                        "forkLabel": "main"
                    },
                    {
                        "id": 1699418945,
                        "fork": 2,
                        "forkLabel": "easy"
                    }
                ]
            },
            {
                "index": 2,
                "isTranslucent": true,
                "threadIds": [
                    {
                        "id": 1699418944,
                        "fork": 0,
                        "forkLabel": "main"
                    }
                ]
            }
        ],
        "threads": [
            {
                "id": 1699418944,
                "fork": 1,
                "forkLabel": "owner",
                "videoId": "so42997483",
                "isActive": false,
                "isDefaultPostTarget": false,
                "isEasyCommentPostTarget": false,
                "isLeafRequired": false,
                "isOwnerThread": true,
                "isThreadkeyRequired": false,
                "threadkey": null,
                "is184Forced": false,
                "hasNicoscript": true,
                "label": "owner",
                "postkeyStatus": 0,
                "server": "https:\/\/nvcomment.nicovideo.jp\/legacy"
            },
            {
                "id": 1699418944,
                "fork": 0,
                "forkLabel": "main",
                "videoId": "so42997483",
                "isActive": true,
                "isDefaultPostTarget": false,
                "isEasyCommentPostTarget": false,
                "isLeafRequired": true,
                "isOwnerThread": false,
                "isThreadkeyRequired": false,
                "threadkey": null,
                "is184Forced": false,
                "hasNicoscript": false,
                "label": "default",
                "postkeyStatus": 0,
                "server": "https:\/\/nvcomment.nicovideo.jp\/legacy"
            },
            {
                "id": 1699418945,
                "fork": 0,
                "forkLabel": "main",
                "videoId": "so42997483",
                "isActive": true,
                "isDefaultPostTarget": true,
                "isEasyCommentPostTarget": false,
                "isLeafRequired": true,
                "isOwnerThread": false,
                "isThreadkeyRequired": true,
                "threadkey": ".1699604642.~1~JbdFyq_zC0ALezhIUXAi20XdpHcLrMSkq4m7phELS2M",
                "is184Forced": true,
                "hasNicoscript": false,
                "label": "community",
                "postkeyStatus": 0,
                "server": "https:\/\/nvcomment.nicovideo.jp\/legacy"
            },
            {
                "id": 1699418945,
                "fork": 2,
                "forkLabel": "easy",
                "videoId": "so42997483",
                "isActive": true,
                "isDefaultPostTarget": false,
                "isEasyCommentPostTarget": true,
                "isLeafRequired": true,
                "isOwnerThread": false,
                "isThreadkeyRequired": true,
                "threadkey": ".1699604642.~1~JbdFyq_zC0ALezhIUXAi20XdpHcLrMSkq4m7phELS2M",
                "is184Forced": true,
                "hasNicoscript": false,
                "label": "easy",
                "postkeyStatus": 0,
                "server": "https:\/\/nvcomment.nicovideo.jp\/legacy"
            }
        ],
        "ng": {
            "ngScore": {
                "isDisabled": false
            },
            "channel": [],
            "owner": [],
            "viewer": {
                "revision": 8,
                "count": 3,
                "items": [
                    {
                        "type": "word",
                        "source": "頼りなかったね",
                        "registeredAt": "2021-12-04T21: 49: 31+09: 00"
                    },
                    {
                        "type": "id",
                        "source": "54CC98hvAOYQsT4xI3NUat6cXRc",
                        "registeredAt": "2021-12-04T21: 49: 37+09: 00"
                    },
                    {
                        "type": "id",
                        "source": "TKFjOR7rQE6CpiM-TUIZUCc7WmY",
                        "registeredAt": "2021-12-04T21: 49: 44+09: 00"
                    }
                ]
            }
        },
        "isAttentionRequired": false,
        "nvComment": {
            "threadKey": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI2NTRkZTE5YTliMGI1IiwiZXhwIjoxNjk5NjA1NDIyLCJ0eXAiOiJUaHJlYWQtS2V5IiwidGlkcyI6WyIxNjk5NDE4OTQ0IiwiMTY5OTQxODk0NSJdLCJmMTg0cyI6WyIxNjk5NDE4OTQ1Il0sInVpZCI6IjUzODQyMTg1In0.H_k9UTOdPFvElYSnGOVC54RmUoNgn0KT1JfA0JSx93JqgxSwOauqUwxwpmQ6n_xk1VukPg_YiHNiQ_0omzXxfQ",
            "server": "https:\/\/nv-comment.nicovideo.jp",
            "params": {
                "targets": [
                    {
                        "id": "1699418944",
                        "fork": "owner"
                    },
                    {
                        "id": "1699418944",
                        "fork": "main"
                    },
                    {
                        "id": "1699418945",
                        "fork": "main"
                    },
                    {
                        "id": "1699418945",
                        "fork": "easy"
                    }
                ],
                "language": "ja-jp"
            }
        }
    },
    "community": null,
    "easyComment": {
        "phrases": [
            {
                "text": "うぽつ",
                "nicodic": {
                    "title": "うぽつ",
                    "viewTitle": "うぽつ",
                    "summary": "うぽつとはうp乙のことでうp(アップロード)乙(お疲れ様です)という意味。語源はうpと乙をローマ字で打つと「うぽつ」(up otu→u po tu)になることから。\n類義語にうぱりがある。\n関連項目\n",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%E3%81%86%E3%81%BD%E3%81%A4"
                }
            },
            {
                "text": "www",
                "nicodic": {
                    "title": "www",
                    "viewTitle": "www",
                    "summary": "wwwとは\n World Wide Web(ワールドワイドウェブ)\n ASIAN KUNG-FU GENERATIONの4thフルアルバム『ワールド ワールド ワールド』の省略表記\n QuinRose",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/www"
                }
            },
            {
                "text": "おお",
                "nicodic": {
                    "title": "おお",
                    "viewTitle": "おお",
                    "summary": "おおとは、\n 何かに驚いたときに出る感嘆の声。\n 大きいさま。\n 極限、根本。\n 序列が上位であることを表す際に使用される言葉。\n 敬意を表す際に使用される言葉。\n おおよそ。\n1の概要\nかんたんコメ",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%E3%81%8A%E3%81%8A"
                }
            },
            {
                "text": "すき",
                "nicodic": {
                    "title": "すき",
                    "viewTitle": "すき",
                    "summary": "もしかして? → 好き\nひょっとして? → 鋤\n概要\n隙ありっ! これで全部だと思うたか!?\n関連静画\n関連項目\n すすきの\n 自動リンクされていない記事の一覧",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%E3%81%99%E3%81%8D"
                }
            },
            {
                "text": "ここすき",
                "nicodic": {
                    "title": "ここすき",
                    "viewTitle": "ここすき",
                    "summary": "発祥\nアイマスMAD「もっとすいみんぶそく」が発祥である\n普及\nニコニコ動画での公式アニメ配信以降、他のアニメのOPで「ここすき」というコメントが度々見受けられていたが、\n「花咲くいろは」のOPでの弾",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%E3%81%93%E3%81%93%E3%81%99%E3%81%8D"
                }
            },
            {
                "text": "!?",
                "nicodic": {
                    "title": "!?",
                    "viewTitle": "!?",
                    "summary": "概要!?\n!?とは\"強烈\"かつ\"理解不能\"な驚きを示す約物(記号)である…!?\n専門用語では「感嘆符疑問符」という名前である。投げやりじゃねえか!? 略すると「感嘆修辞疑問符」という長ったらしい上によ",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%21%3F"
                }
            },
            {
                "text": "おつ",
                "nicodic": {
                    "title": "おつ",
                    "viewTitle": "おつ",
                    "summary": "乙とは、以下のことを表す。\n 乙(おつ、きのと) - 十干の第2位。五行は木、陰陽は陰。草花を象徴し、協調・社交・和合を意味する。\n 乙(おつ) - 甲で始まる順位の第2位。「乙種」「甲乙つけがたい」",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/%E3%81%8A%E3%81%A4"
                }
            },
            {
                "text": "88888888",
                "nicodic": {
                    "title": "88888888",
                    "viewTitle": "88888888",
                    "summary": "8は整数のひとつ。7の次、9の前。\n概要\n酸素(O)の原子番号。\n横に倒すと∞になってしまうので注意。8からずいぶん離れてしまう。\n「八」は末広がりの形をしているため、縁起の良い数とされる。\nニコニコ",
                    "link": "https:\/\/dic.nicovideo.jp\/a\/88888888"
                }
            }
        ]
    },
    "external": {
        "commons": {
            "hasContentTree": true
        },
        "ichiba": {
            "isEnabled": false
        }
    },
    "genre": {
        "key": "radio",
        "label": "ラジオ",
        "isImmoral": false,
        "isDisabled": false,
        "isNotSet": false
    },
    "marquee": {
        "isDisabled": false,
        "tagRelatedLead": null
    },
    "media": {
        "domand": {
            "videos": [
                {
                    "id": "video-h264-480p",
                    "isAvailable": true,
                    "label": "480p",
                    "bitRate": 792909,
                    "width": 854,
                    "height": 480,
                    "qualityLevel": 2,
                    "recommendedHighestAudioQualityLevel": 1
                },
                {
                    "id": "video-h264-360p",
                    "isAvailable": true,
                    "label": "360p",
                    "bitRate": 481372,
                    "width": 640,
                    "height": 360,
                    "qualityLevel": 1,
                    "recommendedHighestAudioQualityLevel": 1
                },
                {
                    "id": "video-h264-144p",
                    "isAvailable": true,
                    "label": "144p",
                    "bitRate": 116723,
                    "width": 256,
                    "height": 144,
                    "qualityLevel": 0,
                    "recommendedHighestAudioQualityLevel": 1
                }
            ],
            "audios": [
                {
                    "id": "audio-aac-128kbps",
                    "isAvailable": true,
                    "bitRate": 117291,
                    "samplingRate": 48000,
                    "integratedLoudness": -22.897116000000000468617145088501274585723876953125,
                    "truePeak": -7.8335220000000003182094587828032672405242919921875,
                    "qualityLevel": 1,
                    "loudnessCollection": [
                        {
                            "type": "video",
                            "value": 1
                        },
                        {
                            "type": "pureAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "pureAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "pureAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "nicoadVideoIntroduce",
                            "value": 0.35904112827632694848745131821488030254840850830078125
                        },
                        {
                            "type": "nicoadBillboard",
                            "value": 0.803792963487639955388885937281884253025054931640625
                        },
                        {
                            "type": "marquee",
                            "value": 0.4520060002663173204240365521400235593318939208984375
                        }
                    ]
                },
                {
                    "id": "audio-aac-64kbps",
                    "isAvailable": true,
                    "bitRate": 68751,
                    "samplingRate": 48000,
                    "integratedLoudness": -22.897116000000000468617145088501274585723876953125,
                    "truePeak": -7.8335220000000003182094587828032672405242919921875,
                    "qualityLevel": 0,
                    "loudnessCollection": [
                        {
                            "type": "video",
                            "value": 1
                        },
                        {
                            "type": "pureAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdPreroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "pureAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdMidroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "pureAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "houseAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "networkAdPostroll",
                            "value": 0.285196505617149098643636762062669731676578521728515625
                        },
                        {
                            "type": "nicoadVideoIntroduce",
                            "value": 0.35904112827632694848745131821488030254840850830078125
                        },
                        {
                            "type": "nicoadBillboard",
                            "value": 0.803792963487639955388885937281884253025054931640625
                        },
                        {
                            "type": "marquee",
                            "value": 0.4520060002663173204240365521400235593318939208984375
                        }
                    ]
                }
            ],
            "isStoryboardAvailable": false,
            "accessRightKey": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI2NTRkZTE5YTljMWFmIiwiZXhwIjoxNjk5NjAzNDQyLCJ0eXAiOiJBY2Nlc3MtUmlnaHQtS2V5IiwidmlkIjoic280Mjk5NzQ4MyIsInJpZCI6Im5pY292aWRlby1zbzQyOTk3NDgzIiwiZmlkIjo2LCJ1aWQiOiI1Mzg0MjE4NSIsImQiOjE3MjAsInYiOlsidmlkZW8taDI2NC00ODBwIiwidmlkZW8taDI2NC0zNjBwIiwidmlkZW8taDI2NC0xNDRwIl0sImEiOlsiYXVkaW8tYWFjLTEyOGticHMiLCJhdWRpby1hYWMtNjRrYnBzIl0sInMiOmZhbHNlLCJzaCI6ZmFsc2V9.GsatBfMw8CEUnpDW7MN2SLCEknKIs3Cm9x3jQUUnWUI1JTRP3EzAuQN6Oun7fE3zXsCspx0jQqbkE9WBgs2yDA"
        },
        "delivery": {
            "recipeId": "nicovideo-so42997483",
            "encryption": null,
            "movie": {
                "contentId": "out1",
                "audios": [
                    {
                        "id": "archive_aac_128kbps",
                        "isAvailable": true,
                        "metadata": {
                            "bitrate": 128000,
                            "samplingRate": 48000,
                            "loudness": {
                                "integratedLoudness": -22.89999999999999857891452847979962825775146484375,
                                "truePeak": -7.9000000000000003552713678800500929355621337890625
                            },
                            "levelIndex": 1,
                            "loudnessCollection": [
                                {
                                    "type": "video",
                                    "value": 1
                                },
                                {
                                    "type": "pureAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "pureAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "pureAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "nicoadVideoIntroduce",
                                    "value": 0.358921934645005269448603257842478342354297637939453125
                                },
                                {
                                    "type": "nicoadBillboard",
                                    "value": 0.803526122185617364124254891066811978816986083984375
                                },
                                {
                                    "type": "marquee",
                                    "value": 0.451855944374922435802233167123631574213504791259765625
                                }
                            ]
                        }
                    },
                    {
                        "id": "archive_aac_64kbps",
                        "isAvailable": true,
                        "metadata": {
                            "bitrate": 64000,
                            "samplingRate": 48000,
                            "loudness": {
                                "integratedLoudness": -22.89999999999999857891452847979962825775146484375,
                                "truePeak": -7.9000000000000003552713678800500929355621337890625
                            },
                            "levelIndex": 0,
                            "loudnessCollection": [
                                {
                                    "type": "video",
                                    "value": 1
                                },
                                {
                                    "type": "pureAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdPreroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "pureAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdMidroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "pureAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "houseAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "networkAdPostroll",
                                    "value": 0.28510182675039097421887390737538225948810577392578125
                                },
                                {
                                    "type": "nicoadVideoIntroduce",
                                    "value": 0.358921934645005269448603257842478342354297637939453125
                                },
                                {
                                    "type": "nicoadBillboard",
                                    "value": 0.803526122185617364124254891066811978816986083984375
                                },
                                {
                                    "type": "marquee",
                                    "value": 0.451855944374922435802233167123631574213504791259765625
                                }
                            ]
                        }
                    }
                ],
                "videos": [
                    {
                        "id": "archive_h264_480p",
                        "isAvailable": true,
                        "metadata": {
                            "label": "480p",
                            "bitrate": 187000,
                            "resolution": {
                                "width": 854,
                                "height": 480
                            },
                            "levelIndex": 2,
                            "recommendedHighestAudioLevelIndex": 1
                        }
                    },
                    {
                        "id": "archive_h264_360p",
                        "isAvailable": true,
                        "metadata": {
                            "label": "360p",
                            "bitrate": 140000,
                            "resolution": {
                                "width": 640,
                                "height": 360
                            },
                            "levelIndex": 1,
                            "recommendedHighestAudioLevelIndex": 1
                        }
                    },
                    {
                        "id": "archive_h264_360p_low",
                        "isAvailable": true,
                        "metadata": {
                            "label": "低画質",
                            "bitrate": 156000,
                            "resolution": {
                                "width": 640,
                                "height": 360
                            },
                            "levelIndex": 0,
                            "recommendedHighestAudioLevelIndex": 1
                        }
                    }
                ],
                "session": {
                    "recipeId": "nicovideo-so42997483",
                    "playerId": "nicovideo-6-glNYzmqwq0_1699602842437",
                    "videos": [
                        "archive_h264_480p",
                        "archive_h264_360p",
                        "archive_h264_360p_low"
                    ],
                    "audios": [
                        "archive_aac_128kbps",
                        "archive_aac_64kbps"
                    ],
                    "movies": [],
                    "protocols": [
                        "http",
                        "hls"
                    ],
                    "authTypes": {
                        "http": "ht2",
                        "hls": "ht2"
                    },
                    "serviceUserId": "53842185",
                    "token": "{\"service_id\":\"nicovideo\",\"player_id\":\"nicovideo-6-glNYzmqwq0_1699602842437\",\"recipe_id\":\"nicovideo-so42997483\",\"service_user_id\":\"53842185\",\"protocols\":[{\"name\":\"http\",\"auth_type\":\"ht2\"},{\"name\":\"hls\",\"auth_type\":\"ht2\"}],\"videos\":[\"archive_h264_360p\",\"archive_h264_360p_low\",\"archive_h264_480p\"],\"audios\":[\"archive_aac_128kbps\",\"archive_aac_64kbps\"],\"movies\":[],\"created_time\":1699602842000,\"expire_time\":1699689242000,\"content_ids\":[\"out1\"],\"heartbeat_lifetime\":120000,\"content_key_timeout\":600000,\"priority\":0.59999999999999997779553950749686919152736663818359375,\"transfer_presets\":[]}",
                    "signature": "3e3439a6b07ef978f55060f95a32767c8e9e9e4b8612ca815cbd6705614c56b1",
                    "contentId": "out1",
                    "heartbeatLifetime": 120000,
                    "contentKeyTimeout": 600000,
                    "priority": 0.59999999999999997779553950749686919152736663818359375,
                    "transferPresets": [],
                    "urls": [
                        {
                            "url": "https:\/\/api.dmc.nico\/api\/sessions",
                            "isWellKnownPort": true,
                            "isSsl": true
                        }
                    ]
                }
            },
            "storyboard": null,
            "trackingId": "qzw48om9d86adbu02jc9pxutsqwd+51fd+onnu1nlj7sttyyshhp17\/xs67z6tek184r79lh\/wonv0hlrxlidn09441v9299+pv\/zuomvna="
        },
        "deliveryLegacy": null
    },
    "okReason": "PURELY",
    "owner": null,
    "payment": {
        "video": {
            "isPpv": false,
            "isAdmission": false,
            "isContinuationBenefit": false,
            "isPremium": false,
            "watchableUserType": "all",
            "commentableUserType": "all"
        },
        "preview": {
            "ppv": {
                "isEnabled": false
            },
            "admission": {
                "isEnabled": false
            },
            "continuationBenefit": {
                "isEnabled": false
            },
            "premium": {
                "isEnabled": false
            }
        }
    },
    "pcWatchPage": {
        "tagRelatedBanner": null,
        "videoEnd": {
            "bannerIn": null,
            "overlay": null
        },
        "showOwnerMenu": false,
        "showOwnerThreadCoEditingLink": false,
        "showMymemoryEditingLink": false
    },
    "player": {
        "initialPlayback": null,
        "comment": {
            "isDefaultInvisible": false
        },
        "layerMode": 0
    },
    "ppv": null,
    "ranking": {
        "genre": {
            "rank": 1,
            "genre": "ラジオ",
            "dateTime": "2023-11-09T07:00:00+09:00"
        },
        "popularTag": [
            {
                "tag": "ラジオ",
                "regularizedTag": "ラジオ",
                "rank": 1,
                "genre": "ラジオ",
                "dateTime": "2023-11-08T23:00:00+09:00"
            },
            {
                "tag": "声優",
                "regularizedTag": "声優",
                "rank": 1,
                "genre": "ラジオ",
                "dateTime": "2023-11-09T07:00:00+09:00"
            },
            {
                "tag": "洲崎西",
                "regularizedTag": "洲崎西",
                "rank": 1,
                "genre": "ラジオ",
                "dateTime": "2023-11-08T21:00:00+09:00"
            }
        ]
    },
    "series": {
        "id": 214098,
        "title": "洲崎西",
        "description": "",
        "thumbnailUrl": "https:\/\/nicovideo.cdn.nimg.jp\/web\/img\/series\/no_thumbnail.png",
        "video": {
            "prev": null,
            "next": {
                "type": "essential",
                "id": "so42963897",
                "title": "洲崎西 第536回放送(2023.10.31)",
                "registeredAt": "2023-11-01T20:00:00+09:00",
                "count": {
                    "view": 6674,
                    "comment": 254,
                    "mylist": 41,
                    "like": 72
                },
                "thumbnail": {
                    "url": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42963897\/42963897.81847429",
                    "middleUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42963897\/42963897.81847429.M",
                    "largeUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42963897\/42963897.81847429.L",
                    "listingUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42963897\/42963897.81847429.M",
                    "nHdUrl": "https:\/\/img.cdn.nimg.jp\/s\/nicovideo\/thumbnails\/42963897\/42963897.81847429.original\/r640x360l?key=8f8e17a9340aec7b15795aaab1cd6e86e3f621e40c09ab6d1d0b4b1e8bc88bf1"
                },
                "duration": 1725,
                "shortDescription": "この番組は、洲崎綾と西明日香の2人が、新しいサービスを提供したり、新しい商品を生み出すことで、新たな",
                "latestCommentSummary": "26歳って洲崎西始めたくらいの頃じゃね? (にぎにぎ) 言わないでいてあげてw ひでえww こわ 牡牛に せやろか 悪い先輩 www ひでえww したことねぇw しねぇよwwww wwwwww NGにしてやろうかw wwwwwww ひゃー ほんと変わ...",
                "isChannelVideo": true,
                "isPaymentRequired": false,
                "playbackPosition": null,
                "owner": {
                    "ownerType": "channel",
                    "type": "channel",
                    "visibility": "visible",
                    "id": "ch2589908",
                    "name": "シーサイドチャンネル",
                    "iconUrl": "https:\/\/secure-dcdn.cdn.nimg.jp\/comch\/channel-icon\/128x128\/ch2589908.jpg?1699531210"
                },
                "requireSensitiveMasking": false,
                "videoLive": null,
                "isMuted": false,
                "9d091f87": false,
                "acf68865": false
            },
            "first": {
                "type": "essential",
                "id": "so42997483",
                "title": "洲崎西 第537回放送(2023.11.07)",
                "registeredAt": "2023-11-08T20:00:00+09:00",
                "count": {
                    "view": 3177,
                    "comment": 54,
                    "mylist": 42,
                    "like": 37
                },
                "thumbnail": {
                    "url": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960",
                    "middleUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960.M",
                    "largeUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960.L",
                    "listingUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960.M",
                    "nHdUrl": "https:\/\/img.cdn.nimg.jp\/s\/nicovideo\/thumbnails\/42997483\/42997483.14161960.original\/r640x360l?key=53089d7859146ef3de087bfb2ad9ba04664f7480fb2585fd6e32714fe59efbb1"
                },
                "duration": 1720,
                "shortDescription": "この番組は、洲崎綾と西明日香の2人が、新しいサービスを提供したり、新しい商品を生み出すことで、新たな",
                "latestCommentSummary": "うぽつ 知らない子がやって来てー 遊ばないかと笑って言ったー 折りたたみ傘を三脚というか一脚のかわりにできるよ 明日香はんは、嫁なのに料理も出来へんのどすなあ、現代っ子やなあって言われたり? 厚焼き卵も良いぞ スキヤキを食わせるからには、せめて魯山人...",
                "isChannelVideo": true,
                "isPaymentRequired": false,
                "playbackPosition": 0,
                "owner": {
                    "ownerType": "channel",
                    "type": "channel",
                    "visibility": "visible",
                    "id": "ch2589908",
                    "name": "シーサイドチャンネル",
                    "iconUrl": "https:\/\/secure-dcdn.cdn.nimg.jp\/comch\/channel-icon\/128x128\/ch2589908.jpg?1699531210"
                },
                "requireSensitiveMasking": false,
                "videoLive": null,
                "isMuted": false,
                "9d091f87": false,
                "acf68865": false
            }
        }
    },
    "smartphone": null,
    "system": {
        "serverTime": "2023-11-10T16:54:02+09:00",
        "isPeakTime": false
    },
    "tag": {
        "items": [
            {
                "name": "ラジオ",
                "isCategory": false,
                "isCategoryCandidate": false,
                "isNicodicArticleExists": true,
                "isLocked": true
            },
            {
                "name": "洲崎西",
                "isCategory": false,
                "isCategoryCandidate": false,
                "isNicodicArticleExists": true,
                "isLocked": true
            },
            {
                "name": "洲崎綾",
                "isCategory": false,
                "isCategoryCandidate": false,
                "isNicodicArticleExists": true,
                "isLocked": true
            },
            {
                "name": "西明日香",
                "isCategory": false,
                "isCategoryCandidate": false,
                "isNicodicArticleExists": true,
                "isLocked": true
            },
            {
                "name": "声優",
                "isCategory": false,
                "isCategoryCandidate": false,
                "isNicodicArticleExists": true,
                "isLocked": true
            }
        ],
        "hasR18Tag": false,
        "isPublishedNicoscript": false,
        "edit": {
            "isEditable": true,
            "uneditableReason": null,
            "editKey": "1:1699602842:1699418945:ddb4d173f95f1fe8c098dae53dc4607ad8176478b87bdae94913f2daebf53edd"
        },
        "viewer": {
            "isEditable": true,
            "uneditableReason": null,
            "editKey": "1:1699602842:1699418945:ddb4d173f95f1fe8c098dae53dc4607ad8176478b87bdae94913f2daebf53edd"
        }
    },
    "video": {
        "id": "so42997483",
        "title": "洲崎西 第537回放送(2023.11.07)",
        "description": "この番組は、洲崎綾と西明日香の2人が、新しいサービスを提供したり、新しい商品を生み出すことで、新たなビジネススキームを生み出す「アイデア生産」型バラエティ番組です。<br><br><span style=\"color: #0000ff;\"><strong><a href=\"https:\/\/shop.seaside-c.jp\/?mode=cate&amp;cbid=1643421&amp;csid=0\" target=\"_blank\">「洲崎西」番組DVD・DJCD・グッズなどシーサイドSHOPにて販売中!<\/a><\/strong><\/span><br><br>■番組名: 洲崎西<br>■放送局: <a href=\"https:\/\/www.agqr.jp\/\" target=\"_blank\">文化放送超!A&amp;G+<\/a><br>■放送日: 毎週火曜日 25:00~25:30<br>■アーカイブ更新: 毎週水曜日<br>■パーソナリティー: 洲崎綾、西明日香<br>■ラジオ公式サイト: <a href=\"https:\/\/seaside-station.net\/program\/suzakinishi\/\" target=\"_blank\">https:\/\/seaside-station.net\/program\/suzakinishi\/<\/a><br>■番組ツイッター: <a href=\"https:\/\/twitter.com\/suzakinishi\" target=\"_blank\">@suzakinishi<\/a><br>■番組メールアドレス: <a href=\"https:\/\/mailto:suzakinishi@joqr.net\" target=\"_blank\">お便りはコチラ<\/a>",
        "count": {
            "view": 3177,
            "comment": 54,
            "mylist": 42,
            "like": 37
        },
        "duration": 1720,
        "thumbnail": {
            "url": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960",
            "middleUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960.M",
            "largeUrl": "https:\/\/nicovideo.cdn.nimg.jp\/thumbnails\/42997483\/42997483.14161960.L",
            "player": "https:\/\/img.cdn.nimg.jp\/s\/nicovideo\/thumbnails\/42997483\/42997483.14161960.original\/a960x540l?key=de518802ccbc6f2c562b2d593a229ff04ca6d2aed92dcab5bc08c2797d9072ef",
            "ogp": "https:\/\/img.cdn.nimg.jp\/s\/nicovideo\/thumbnails\/42997483\/42997483.14161960.original\/r1280x720l?key=f7c22dc7261ea6bccde541e804c2abc45af67c0947a34feedcf95b827a8e465f"
        },
        "rating": {
            "isAdult": false
        },
        "registeredAt": "2023-11-08T20:00:00+09:00",
        "isPrivate": false,
        "isDeleted": false,
        "isNoBanner": false,
        "isAuthenticationRequired": false,
        "isEmbedPlayerAllowed": true,
        "isGiftAllowed": false,
        "viewer": {
            "isOwner": false,
            "like": {
                "isLiked": false,
                "count": null
            }
        },
        "watchableUserTypeForPayment": "all",
        "commentableUserTypeForPayment": "all",
        "9d091f87": false
    },
    "videoAds": {
        "additionalParams": {
            "videoId": "so42997483",
            "videoDuration": 1720,
            "isAdultRatingNG": false,
            "isAuthenticationRequired": false,
            "isR18": false,
            "nicosid": "1672718598.87345287",
            "lang": "ja-jp",
            "watchTrackId": "glNYzmqwq0_1699602842437",
            "channelId": "ch2589908",
            "genre": "radio",
            "gender": "1",
            "age": 34
        },
        "items": [],
        "reason": null
    },
    "videoLive": null,
    "viewer": {

    },
    "waku": {
        "information": null,
        "bgImages": [],
        "addContents": null,
        "addVideo": null,
        "tagRelatedBanner": {
            "title": "伊藤健太郎と森田成一が生対談!",
            "imageUrl": "https:\/\/wktk.cdn.nimg.jp\/wktk\/311\/image\/VYgfK8bEul.jpeg",
            "description": "超貴重なトークが飛び出すかもしれない企画も!",
            "isEvent": false,
            "linkUrl": "https:\/\/live.nicovideo.jp\/watch\/lv343199198",
            "linkType": "live",
            "linkOrigin": "lv343199198",
            "isNewWindow": false
        },
        "tagRelatedMarquee": {
            "title": "【ゲスト:岸堂天真、アステル・レダ、夕刻ロベル】深町寿成のVバラ!!!",
            "linkUrl": "https:\/\/live.nicovideo.jp\/watch\/lv342926337",
            "linkType": "live",
            "linkOrigin": "lv342926337",
            "isNewWindow": false
        }
    }
tor4kichi commented 8 months ago

新サーバーにおける動画再生までの流れ

  1. 動画ページにアクセスしてinitial-watch-dataにあるjsonをパース
  2. jsonの media.domand.videos および media.domand.audios から任意の動画と音声のクオリティを選択
  3. https://nvapi.nicovideo.jp/v1/watch/{{video.id}}/access-rights/hls?actionTrackId={{videoAds.additionalParams.watchTrackId}} にPOST 3.1 リクエストヘッダーに以下を追加 3.1.1 キー:X-Access-Right-Key 値:{{media.domand.accessRightKey}} 3.1.2 キー:X-Frontend-Version 値:0 3.1.3 キー:X-Frontend-Id 値:6 3.1.4 キー:X-Request-With 値:https://www.nicovideo.jp 3.2 リクエストコンテンツに以下を設定 3.2.1 json {"outputs":[["video-h264-144p","audio-aac-128kbps"]]} 3.2.2 画質・音質の値は media.domand.videos 等の id を指定します 3.3 追記 2023-11-13)actionTrackIdは必須です。無い場合は失敗します。
  4. レスポンスされたjson の data.contentUrl を用いてメディア再生を行う

(3)のレスポンス例

{
  "meta": {
    "status": 201
  },
  "data": {
    "contentUrl": "https://delivery.domand.nicovideo.jp/hls/654b11200d7d2ef695f075ba/playlists/variants/1e1d32ffbbec3289.m3u8",
    "createTime": "2023-11-10T17:00:28+09:00",
    "expireTime": "2023-11-11T17:00:28+09:00"
  }
}

Windows系であればdata.contentUrl を使ってAdaptiveMediaSourceを生成してMediaPlayer.Sourceに指定すれば再生できると思われます (未検証) 2023-11-11 追記:再生可能を確認

tor4kichi commented 8 months ago

(3)のリクエストコンテンツを {"outputs":[["audio-aac-128kbps"]]} などと指定すれば音声のみのストリームを取得できるようです。

まだ再生までは試してないです。 (2023-11-11追記: 再生できました。映像ストリームが空の状態で音声だけで再生可能です)

tor4kichi commented 8 months ago

NiconicoToolkit側の実装はこちら

https://github.com/tor4kichi/NiconicoToolkit/blob/010bfa288f6ad5100140d8f2c57fa57ebc9f4f84/NiconicoToolkit.Shared/Video/Watch/VideoWatchSubClient.cs#L151

tor4kichi commented 8 months ago

media.videos[].recommendedHighestAudioQualityLevel が示す音声クオリティはユーザーがエコノミーモードの状態では利用できない場合があります。IsAvairable == true の音質を指定すればOK

tor4kichi commented 8 months ago

現状では音声クオリティは192kbpsと64kbpsの2種類のみのようです。エコノミーモードでは64kbpsのみが再生可能。

動画の画質を指定せずに音声ストリームのみを取得する場合でも、エコノミーモード状態では192kbpsは取得できませんでした。

tor4kichi commented 8 months ago

上記対応を追加した NiconicoTookit v0.5.x を nuget で公開してます。

https://www.nuget.org/packages/NiconicoToolkit/