spencerwooo / onedrive-vercel-index

OneDrive public directory listing, powered by Vercel and Next.js
https://drive.swo.moe
MIT License
3.03k stars 3.56k forks source link

.ts视频文件被当作文本文件处理 #130

Closed Lparksi closed 2 years ago

Lparksi commented 2 years ago

.ts视频文件被当作文本文件处理

样本视频:https://pan.parksi.top/%E8%A7%86%E9%A2%91/%E6%B4%8B%E8%91%B1%E5%AD%A6%E5%9B%AD%EF%BC%9A%E6%95%B0%E5%AD%A6%EF%BC%9A%E6%96%B0%E5%8D%8E%E5%B8%88%E5%A4%A7/%E5%BF%85%E4%BF%AE%E4%B8%80/1.%E3%80%8A%E9%9B%86%E5%90%88%E4%B8%8E%E5%90%AB%E5%8F%82%E6%96%B9%E7%A8%8B%E3%80%8B%E4%B8%93%E9%A2%98%E8%AF%BE/0.%E4%BB%8B%E7%BB%8D%E8%A7%86%E9%A2%91.ts

渲染的部分内容:

G@B�%�����HFFmpeg  Service01w|C������������������������������������������������������������������������������������������������������������������������������������������������G@�
��*�������������������������������������������������������������������������������������������������������������������������������������������������������������������������GP��������
eng����������������������������������������������������������������������������������������������������������������������������������������������������������GA0P{~���
1   ��a �gd��@P� �`h���"�����E���H��,� �#��x264 - core 148 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.orgG/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 faGst_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0G direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.4G0 aq=1:1.00�e��;���N��T�*�W
�ʤ&Y�Rk�
[j(�i�ɽ4uU&�
@2@��s�d�}�`G��EV�XM�[�  ������etv��\�j�)C2��K}�]i���I�uZ|�(�o�L{�
��~¤�E5�Ĕ�!�j��&��'ʫpۢ�����o&��O
�|T2^3�7�<F����sq��
��B��20
ٕ�0��W��v#:}q��=���Gʮ���,�l1Y��8��?N�AKz�����1�-�����Qs:���:*)$�����ͮ�Ǒ
j������z�Rb�Do(sر$�7`����B���X�IYe%�|~�6������}D�>97E�4���F<��q�¨����'�@���c�'�E�;��j�\������cG�O�8l����[
�CH�i,��#��9�d*�g���ί�}K��K�T��D&�J9�   ���ɯt��->C`ݎ���}�G:��+�B����+�S����׊�u�����^%���FV׌�^$(��1����k�~q��m�k���,',��#��Q)��;ޟIe��G�R⧳�p"s�����}8#Sg��kK�E�ӝ�xe_{�M+��o[\>dڵM��@�������e�Ͽ�V̺83��q��`N�<<R���c��{��MHtIFF#��9=��;"��y��1���jV���vm�q����ؓ�����.�u����v��#�JA���W]kH�|՜���5���Gao�ʸ���Y��%
gG^�J�;V�:����?����j�_�-h4�d�UR�rR㋬�O��ol��<l��?'���4�K,?�5�[*�f��5b�;��>\�Ș���Y|��߳�����i�D�ۿ�6s�G;hg�pg1[~�4�Qĝ,���N�s��~��@K��yx�oP��GK�f����ۚocl�V��{���i��H�Eb���[uMV�ol�~Xl̿��vӂ{f��֑t!���3��Ľ�0�~5��t��(��E�&f�N���.>��FL%`⤹{�e�Qm�pT�`�T/!�HUA��͠�o�d&G%B��F#A�>���('q�c������#��!�s�g:�G�G��9�#ʪ��04||–���UO�'�KGQ$���'�   ��o��-��$ILo��v[��I�� j�?��
;�YJ�h&�XAȕ���e�������+�Z����v �71F��^���h�9_�w�B���c��˜������������;����O(��Md��:����(�D�M%�7�"�z�5G<������������������������������������������������������������������������������������������������������������������������������������������������������������������������5�:��l����ջGA=s���������������������������������������������������������������������������������������������������������������������
1   �!�  �A�$lC���A]�Q�GA>y�~���������������������������������������������������������������������������������������������������������������������
1   H� � �A�Bx��qGA?~��������������������������������������������������������������������������������������������������������������������������������!   ,� ��atB�&�GA0y�,~���������������������������������������������������������������������������������������������������������������������
1   e H� ��cjB�&�GA1p������������������������������������������������������������������������������������������������������������������
1   �  e �A�hI�Ah�Lg�����GA2w�<~�������������������������������������������������������������������������������������������������������������������
1   �a �! �A��E,/�qGA3~��������������������������������������������������������������������������������������������������������������������������������! �A ���tB�&�GA4y�L~���������������������������������������������������������������������������������������������������������������������
1   Ձ  �a ���jB�&�GA5q�������������������������������������������������������������������������������������������������������������������
1b!   Ձ  �A��I�Al�LW��8@�GA6w�\~�������������������������������������������������������������������������������������������������������������������
1)�   �  �A��E,/�qGA7~��������������������������������������������������������������������������������������������������������������������������������!
�  ���tB�&�GA8y�l~���������������������������������������������������������������������������������������������������������������������
1F)�   ���jB�&�GA���
1~AF   �A��K�B['FQ%�U��KGo�."�0�9_�ӯ�����(�o��YgCxJ��O���=����FC�B�D���xF����J'��,�M�I�p,��%�5�%�e��͌Ob �VkW�_8�]�Bd���M�K�v)]�c6Y�iVl@G_�Oy�U�յ�\��=    2�j�?��tU�3�V{�O0�|�ش�T����qTt�cp�[8�I�U��i-�X���Z-5���k���}�Hc��x��芇�{�v����xPv�"�@�;���+�7v\�[W���H�J�@n�L�J��=o�xh��ݖ.mn�ۗ��'���9�+(�O|��G�ʞ����ԋ�[�UoY����J)�GHG>��P|�Wr�^���3Q�(�yc��4��"jŪ|��l(���2�|��������D��5w��$>��~�9���najV=F5I٥��&0P^3�b����ވ�Q��좆�B��J�_��![N����q?fh�\ơ�����   ��h�G`8ë�͌�ˬ�!"�Gn   q��]¼v���f�``�7Eh*�L*��J��!�l�0F���vS��7���Mrg��}D�0�uxn��`x�*��6��e�L��7��j���>t$��NI�CN�*o�Uv.˦256�_N��p�0�!��}����?�c�q��U����t�j|���'�G���6[AӤ�8�� J��(銷/���}���5�x4OT������=)l�૫5|}S
K�q\de��J��~  R+i�.}�JA��y���vtOk�=��i�c��L2���fc�
��JyB�hmt���
spencerwooo commented 2 years ago

这让我们写 TypeScript 的人很尴尬啊(TypeScript 文件后缀名也是 .ts),虽然理论上应该用 file/mimetype 判断文件类型,但是之前的尝试让我发现有时候 OneDrive API 返回的图片 mimetype 不对,同样无法断定文件类型,所以现在是用文件后缀名判断文件类型的,也是导致这个文件渲染失败的根本原因。

Lparksi commented 2 years ago

我通过调用Graph API对比了两类文件。

TS视频文件: image 完整返回信息:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('7efdb4db-02d9-4ea9-a9e4-5f4806c836cf')/drives('b%21oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi')/items/$entity",
    "@microsoft.graph.downloadUrl": "https://lparksi-my.sharepoint.com/personal/share_ms_parksi_xyz/_layouts/15/download.aspx?UniqueId=4588f29c-5740-41f4-b278-dc65e21efe0a&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvbHBhcmtzaS1teS5zaGFyZXBvaW50LmNvbUBiMmZlNDY1My00ZTY5LTRlYTYtYTVjMC01Mzk2NzA5ODNkZWUiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNjMzMDgzNzE4IiwiZXhwIjoiMTYzMzA4NzMxOCIsImVuZHBvaW50dXJsIjoiaUtZY3VCcG9SU0QyeWljUGc5ZkJOSzE5ajU3NlozdDlJU0djbE1kbFBXRT0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE1MCIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiWW1Oa01EbGpPVGd0TWpRMU5pMWpNR1F5TFRNMVl6QXRaVGswWldaaE5ESmlNVFF4IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6IlpXVmpZelF6WVRBdE4yVmxZUzAwWkROaUxXRmxZMkV0WlRka1pEYzNZbVF6WW1VNCIsImFwcF9kaXNwbGF5bmFtZSI6IkdyYXBoIEV4cGxvcmVyIiwic2lnbmluX3N0YXRlIjoiW1wia21zaVwiXSIsImFwcGlkIjoiZGU4YmM4YjUtZDlmOS00OGIxLWE4YWQtYjc0OGRhNzI1MDY0IiwidGlkIjoiYjJmZTQ2NTMtNGU2OS00ZWE2LWE1YzAtNTM5NjcwOTgzZGVlIiwidXBuIjoic2hhcmVAbXMucGFya3NpLnh5eiIsInB1aWQiOiIxMDAzMjAwMENCREJBRkVFIiwiY2FjaGVrZXkiOiIwaC5mfG1lbWJlcnNoaXB8MTAwMzIwMDBjYmRiYWZlZUBsaXZlLmNvbSIsInNjcCI6Im15ZmlsZXMucmVhZCBhbGxmaWxlcy5yZWFkIG15ZmlsZXMud3JpdGUgYWxsZmlsZXMud3JpdGUgYWxscHJvZmlsZXMucmVhZCIsInR0IjoiMiIsInVzZVBlcnNpc3RlbnRDb29raWUiOm51bGwsImlwYWRkciI6IjIwLjE5MC4xNDEuNDMifQ.c214UzlnL3BzVWFYQ3BjSllLVmJSeWpYNDBUblZwd0FEQVdpdkpqUy85OD0&ApiVersion=2.0",
    "createdDateTime": "2021-08-30T09:40:54Z",
    "eTag": "\"{4588F29C-5740-41F4-B278-DC65E21EFE0A},2\"",
    "id": "01ZKH6B7U46KEEKQCX6RA3E6G4MXRB57QK",
    "lastModifiedDateTime": "2021-08-30T08:19:14Z",
    "name": "2.集合与含参一次方程:推荐方法.ts",
    "webUrl": "https://lparksi-my.sharepoint.com/personal/share_ms_parksi_xyz/Documents/Public/%E8%A7%86%E9%A2%91/%E6%B4%8B%E8%91%B1%E5%AD%A6%E5%9B%AD%EF%BC%9A%E6%95%B0%E5%AD%A6%EF%BC%9A%E6%96%B0%E5%8D%8E%E5%B8%88%E5%A4%A7/%E5%BF%85%E4%BF%AE%E4%B8%80/1.%E3%80%8A%E9%9B%86%E5%90%88%E4%B8%8E%E5%90%AB%E5%8F%82%E6%96%B9%E7%A8%8B%E3%80%8B%E4%B8%93%E9%A2%98%E8%AF%BE/2.%E9%9B%86%E5%90%88%E4%B8%8E%E5%90%AB%E5%8F%82%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B%EF%BC%9A%E6%8E%A8%E8%8D%90%E6%96%B9%E6%B3%95.ts",
    "cTag": "\"c:{4588F29C-5740-41F4-B278-DC65E21EFE0A},2\"",
    "media": {
        "viewpoint": {
            "isTranscriptionAllowed": false
        }
    },
    "size": 9642520,
    "createdBy": {
        "user": {
            "email": "share@ms.parksi.xyz",
            "id": "7efdb4db-02d9-4ea9-a9e4-5f4806c836cf",
            "displayName": "share"
        }
    },
    "lastModifiedBy": {
        "user": {
            "email": "share@ms.parksi.xyz",
            "id": "7efdb4db-02d9-4ea9-a9e4-5f4806c836cf",
            "displayName": "share"
        }
    },
    "parentReference": {
        "driveId": "b!oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi",
        "driveType": "business",
        "id": "01ZKH6B7SBG7AE24QMHVHK22ATAM7MN5W5",
        "path": "/drives/b!oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi/root:/Public/视频/洋葱学园:数学:新华师大/必修一/1.《集合与含参方程》专题课"
    },
    "file": {
        "mimeType": "application/octet-stream",
        "hashes": {
            "quickXorHash": "penTTYe9FVLX2TudIvXwOg4MF2U="
        }
    },
    "fileSystemInfo": {
        "createdDateTime": "2021-08-30T09:40:54Z",
        "lastModifiedDateTime": "2021-08-30T08:19:14Z"
    },
    "video": {
        "audioBitsPerSample": 16,
        "audioChannels": 2,
        "audioFormat": "AAC",
        "audioSamplesPerSecond": 44100,
        "bitrate": 235403,
        "duration": 313920,
        "frameRate": 25,
        "height": 480,
        "width": 854
    }
}

TS空文本文件: image 完整返回信息:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)",
    "value": [
        {
            "@odata.type": "#microsoft.graph.driveItem",
            "id": "01ZKH6B7Q2YXL4DQYLVVE37RM3IZYZL7ZX",
            "name": "main.ts",
            "webUrl": "https://lparksi-my.sharepoint.com/personal/share_ms_parksi_xyz/Documents/Forms/DispForm.aspx?ID=1821"
        }
    ]
}

发现TS视频文件的返回信息中存在 video 相关信息,而空TS文件则没有。 应该可以作为判断视频文件的一个方法。 希望对你有帮助。

Lparksi commented 2 years ago

补充:TS代码文件 image

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('7efdb4db-02d9-4ea9-a9e4-5f4806c836cf')/drives('b%21oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi')/items/$entity",
    "@microsoft.graph.downloadUrl": "https://lparksi-my.sharepoint.com/personal/share_ms_parksi_xyz/_layouts/15/download.aspx?UniqueId=ce862cc3-b452-4e27-b734-3c9068e9dcea&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvbHBhcmtzaS1teS5zaGFyZXBvaW50LmNvbUBiMmZlNDY1My00ZTY5LTRlYTYtYTVjMC01Mzk2NzA5ODNkZWUiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNjMzMDg1MzExIiwiZXhwIjoiMTYzMzA4ODkxMSIsImVuZHBvaW50dXJsIjoiUFp1Q1QxY04veEllaElkOVNCN05BSTJmUlBvRVpDRVh2ZEw0cUhQL2ExND0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE1MCIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiTVdVM1lUZGlOalV0WlRKaU1DMWxZalZpTFdFMk9HUXRPREJtWXpVNFlUSm1PVFV3IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6IlpXVmpZelF6WVRBdE4yVmxZUzAwWkROaUxXRmxZMkV0WlRka1pEYzNZbVF6WW1VNCIsImFwcF9kaXNwbGF5bmFtZSI6IkdyYXBoIEV4cGxvcmVyIiwic2lnbmluX3N0YXRlIjoiW1wia21zaVwiXSIsImFwcGlkIjoiZGU4YmM4YjUtZDlmOS00OGIxLWE4YWQtYjc0OGRhNzI1MDY0IiwidGlkIjoiYjJmZTQ2NTMtNGU2OS00ZWE2LWE1YzAtNTM5NjcwOTgzZGVlIiwidXBuIjoic2hhcmVAbXMucGFya3NpLnh5eiIsInB1aWQiOiIxMDAzMjAwMENCREJBRkVFIiwiY2FjaGVrZXkiOiIwaC5mfG1lbWJlcnNoaXB8MTAwMzIwMDBjYmRiYWZlZUBsaXZlLmNvbSIsInNjcCI6Im15ZmlsZXMucmVhZCBhbGxmaWxlcy5yZWFkIG15ZmlsZXMud3JpdGUgYWxsZmlsZXMud3JpdGUgYWxscHJvZmlsZXMucmVhZCIsInR0IjoiMiIsInVzZVBlcnNpc3RlbnRDb29raWUiOm51bGwsImlwYWRkciI6IjIwLjE5MC4xNDEuNDUifQ.MEVzeU5GNXZkNmhycWxiRCtIZFhSYm5MSnhmUitjZEdsTW5mdFJzL0o0ST0&ApiVersion=2.0",
    "createdDateTime": "2021-10-01T10:42:32Z",
    "eTag": "\"{CE862CC3-B452-4E27-B734-3C9068E9DCEA},9\"",
    "id": "01ZKH6B7WDFSDM4UVUE5HLONB4SBUOTXHK",
    "lastModifiedDateTime": "2021-10-01T10:44:43Z",
    "name": "index.ts",
    "webUrl": "https://lparksi-my.sharepoint.com/personal/share_ms_parksi_xyz/Documents/Public/others/index.ts",
    "cTag": "\"c:{CE862CC3-B452-4E27-B734-3C9068E9DCEA},4\"",
    "media": {
        "viewpoint": {
            "isTranscriptionAllowed": false
        }
    },
    "size": 5535,
    "createdBy": {
        "user": {
            "email": "share@ms.parksi.xyz",
            "id": "7efdb4db-02d9-4ea9-a9e4-5f4806c836cf",
            "displayName": "share"
        }
    },
    "lastModifiedBy": {
        "user": {
            "email": "share@ms.parksi.xyz",
            "id": "7efdb4db-02d9-4ea9-a9e4-5f4806c836cf",
            "displayName": "share"
        }
    },
    "parentReference": {
        "driveId": "b!oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi",
        "driveType": "business",
        "id": "01ZKH6B7UWL3JKOB2FA5HYHKNNI5YTR2QB",
        "path": "/drives/b!oEPM7up-O02uyufdd7076C2LBrf9iN9HuV2fyBUeh9MTLPQ6UWNTQ7SK07d3invi/root:/Public/others"
    },
    "file": {
        "mimeType": "application/octet-stream",
        "hashes": {
            "quickXorHash": "j4HiXcagRvf5zWPfuoOr//Grdgs="
        }
    },
    "fileSystemInfo": {
        "createdDateTime": "2021-10-01T10:42:32Z",
        "lastModifiedDateTime": "2021-10-01T10:44:43Z"
    }
}
aozaki-kuro commented 2 years ago

之前我也碰到了类似问题,最后用 ffmpeg 把所有的 .ts 文件重新打包成 .mp4 解决了…

spencerwooo commented 2 years ago

现在的话呢,是区分了两种文件类型,但是目前 TS 视频文件还不能直接在线播放。后续考虑更换视频播放器,这个 issue 暂时先 close 了。