Closed Lparksi closed 2 years ago
这让我们写 TypeScript 的人很尴尬啊(TypeScript 文件后缀名也是 .ts
),虽然理论上应该用 file/mimetype 判断文件类型,但是之前的尝试让我发现有时候 OneDrive API 返回的图片 mimetype 不对,同样无法断定文件类型,所以现在是用文件后缀名判断文件类型的,也是导致这个文件渲染失败的根本原因。
我通过调用Graph API对比了两类文件。
TS视频文件: 完整返回信息:
{
"@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空文本文件: 完整返回信息:
{
"@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文件则没有。 应该可以作为判断视频文件的一个方法。 希望对你有帮助。
补充:TS代码文件
{
"@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"
}
}
之前我也碰到了类似问题,最后用 ffmpeg 把所有的 .ts 文件重新打包成 .mp4 解决了…
现在的话呢,是区分了两种文件类型,但是目前 TS 视频文件还不能直接在线播放。后续考虑更换视频播放器,这个 issue 暂时先 close 了。
.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
渲染的部分内容: