Closed RedRedFlower closed 1 year ago
Off-hand, I'd say that it should work.. regardless of the convention used for the format of the URLs by the video host. Do you have an example that I can test?
I just made my own manifest w/ mp4 segments.. to request through the proxy.. and check the format of the video segment URLs in the resulting proxied manifest..
master.m3u8:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:20675867
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:42.373Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=9.743,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675867.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:48.379Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=15.749,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675868.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:54.385Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=21.755,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675869.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:00.391Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=27.761,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675870.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:06.397Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=33.767,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675871.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:12.403Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=39.773,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675872.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:18.409Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=45.779,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675873.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:24.415Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=51.785,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675874.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:30.421Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=57.791,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675875.mp4
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:36.427Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=63.797,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
master_12_20675876.mp4
URL (direct):
http://localhost/master.m3u8
URL (proxied):
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXIubTN1OA==.m3u8
__proxied_master.m3u8__:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:20675867
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:42.373Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=9.743,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NjcubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:48.379Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=15.749,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NjgubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:36:54.385Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=21.755,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NjkubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:00.391Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=27.761,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzAubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:06.397Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=33.767,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzEubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:12.403Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=39.773,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzIubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:18.409Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=45.779,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzMubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:24.415Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=51.785,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzQubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:30.421Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=57.791,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzUubXA0.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-15T04:37:36.427Z
#EXT-X-CUE-OUT-CONT:CAID=0x4B7347644F515A344F545F615A6F5848346A4E5A344D41365631694650547948,ElapsedTime=63.797,Duration=180.013,SCTE35=/DBOAAAAAyiYAP/wBQb+7pp5RgA4AjZDVUVJAPEdS3/DAAD3NeEBIEtzR2RPUVo0T1RfYVpvWEg0ak5aNE1BNlYxaUZQVHlINAAAAAB0jQ+y
#EXTINF:6.006,
http://localhost:8080/aHR0cDovL2xvY2FsaG9zdC9tYXN0ZXJfMTJfMjA2NzU4NzYubXA0.ts
version of HLS-Proxy:
3.4.0
conclusions: looks good to me
Thanks for your fast response. I found out the problem is not related to .mp4, .ts also got the same problem.
The source is Cloudflare's stream. Sample HLS: https://customer-wi9sckcs7uxt7lh4.cloudflarestream.com/5d5bc37ffcf54c9b82e996823bffbb81/manifest/video.m3u8
Maybe the path contain ../../ ?
Thanks.
master:
240p:
1st video segment:
../../5d5bc37ffcf54c9b82e996823bffbb81/video/240/seg_1.ts
console.log(
atob('aHR0cHM6Ly9jdXN0b21lci13aTlzY2tjczd1eHQ3bGg0LmNsb3VkZmxhcmVzdHJlYW0uY29tLzVkNWJjMzdmZmNmNTRjOWI4MmU5OTY4MjNiZmZiYjgxL21hbmlmZXN0L3N0cmVhbV90YTJkM2M1ZDU2YTlmODUzN2RhYTNiMmI3ZGRhYmQ1YjBfcjE1MjE4MzgwLm0zdTg=')
)
// output: https://customer-wi9sckcs7uxt7lh4.cloudflarestream.com/5d5bc37ffcf54c9b82e996823bffbb81/manifest/stream_ta2d3c5d56a9f8537daa3b2b7ddabd5b0_r15218380.m3u8
// OK
console.log(
atob('aHR0cHM6Ly9jdXN0b21lci13aTlzY2tjczd1eHQ3bGg0LmNsb3VkZmxhcmVzdHJlYW0uY29tLzVkNWJjMzdmZmNmNTRjOWI4MmU5OTY4MjNiZmZiYjgxL21hbmlmZXN0Ly4uLy4uLzVkNWJjMzdmZmNmNTRjOWI4MmU5OTY4MjNiZmZiYjgxL3ZpZGVvLzI0MC9zZWdfMS50cz9wPWV5SjBlWEJsSWpvaWRISmhibk50ZFhnaUxDSjJhV1JsYjBsRUlqb2lOV1ExWW1Nek4yWm1ZMlkxTkdNNVlqZ3laVGs1TmpneU0ySm1abUppT0RFaUxDSnZkMjVsY2tsRUlqb3pOakV6TXpBeExDSmpjbVZoZEc5eVNVUWlPaUlpTENKelpXZHRaVzUwUkhWeVlYUnBiMjVUWldOeklqbzBMQ0oxYzJWV1QwUlBWRVpGSWpwMGNuVmxMQ0ptY205dFRXVjZlbUZ1YVc1bElqcG1ZV3h6WlN3aWRISmhZMnNpT2lKaE1tUXpZelZrTlRaaE9XWTROVE0zWkdGaE0ySXlZamRrWkdGaVpEVmlNQ0lzSW5KbGJtUnBkR2x2YmlJNklqRTFNakU0TXpnd0lpd2liWFY0YVc1bklqb2lNekEwTVRReU56RWlmUSZzPXdvTENpY0s0dzRmQ244S2dhQkxEdTA3Q3ZHekRyMHpDaW1QRG1NS3l3N0RDaVMzQ29jS0RaY0szd3FkLVc4S1d3NFlJUEE=')
)
// output: https://customer-wi9sckcs7uxt7lh4.cloudflarestream.com/5d5bc37ffcf54c9b82e996823bffbb81/manifest/../../5d5bc37ffcf54c9b82e996823bffbb81/video/240/seg_1.ts?p=eyJ0eXBlIjoidHJhbnNtdXgiLCJ2aWRlb0lEIjoiNWQ1YmMzN2ZmY2Y1NGM5YjgyZTk5NjgyM2JmZmJiODEiLCJvd25lcklEIjozNjEzMzAxLCJjcmVhdG9ySUQiOiIiLCJzZWdtZW50RHVyYXRpb25TZWNzIjo0LCJ1c2VWT0RPVEZFIjp0cnVlLCJmcm9tTWV6emFuaW5lIjpmYWxzZSwidHJhY2siOiJhMmQzYzVkNTZhOWY4NTM3ZGFhM2IyYjdkZGFiZDViMCIsInJlbmRpdGlvbiI6IjE1MjE4MzgwIiwibXV4aW5nIjoiMzA0MTQyNzEifQ&s=woLCicK4w4fCn8KgaBLDu07CvGzDr0zCimPDmMKyw7DCiS3CocKDZcK3wqd-W8KWw4YIPA
// resolves to: https://customer-wi9sckcs7uxt7lh4.cloudflarestream.com/5d5bc37ffcf54c9b82e996823bffbb81/video/240/seg_1.ts?p=eyJ0eXBlIjoidHJhbnNtdXgiLCJ2aWRlb0lEIjoiNWQ1YmMzN2ZmY2Y1NGM5YjgyZTk5NjgyM2JmZmJiODEiLCJvd25lcklEIjozNjEzMzAxLCJjcmVhdG9ySUQiOiIiLCJzZWdtZW50RHVyYXRpb25TZWNzIjo0LCJ1c2VWT0RPVEZFIjp0cnVlLCJmcm9tTWV6emFuaW5lIjpmYWxzZSwidHJhY2siOiJhMmQzYzVkNTZhOWY4NTM3ZGFhM2IyYjdkZGFiZDViMCIsInJlbmRpdGlvbiI6IjE1MjE4MzgwIiwibXV4aW5nIjoiMzA0MTQyNzEifQ&s=woLCicK4w4fCn8KgaBLDu07CvGzDr0zCimPDmMKyw7DCiS3CocKDZcK3wqd-W8KWw4YIPA
// OK
but.. you're right.. if I request the 1st video segment through the proxy.. it responds with 404 so when it requests the URL with "../../" in its path.. it doesn't resolve it properly
hmm.. I'll definitely fix that
rather than fixing this here (in HLS-Proxy).. I think I might fix it in the upstream "request" library.. TBD..
Thanks for you find out the problem.
all fixed.. you'll just need to reinstall HLS-Proxy from npm.
turned out that it was a bug in the 'request' library.. it did already contain logic to normalize the URL pathname.. but in doing so, it removed the querystring parameters from the URL path.. and this video host required those querystring params to serve the .ts video segments.
in any case.. this commit bumps the version of the library to '2.0.13'.. and it'll get pulled (as a dependency) with a fresh install.
Tested, it work fine.
very appreciate for your help !!
The program work fine on HLS with .ts media segment
But it not work on HLS using .mp4 media segment. How to handle this?
Thanks.