24/7 ਸਟ੍ਰੀਮ ਜੋ ਵੀਡੀਓਜ਼ ਦੇ ਵਿਚਕਾਰ ਦੁਬਾਰਾ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੀ: ਇੱਕ ffmpeg ਜੋ ਪਾਈਪ ਰਾਹੀਂ ਖੁਆਇਆ ਜਾਂਦਾ ਹੈ
ਵੀਡੀਓ
ਇੱਕ ਲਾਈਵ ਚੈਨਲ ਜੋ ਪੂਰੀਆਂ ਹੋਈਆਂ ਵੀਡੀਓਜ਼ ਨੂੰ 24 ਘੰਟੇ ਚਲਾਉਂਦੀ ਹੈ, ਦੇ ਦੋ ਆਸਾਨ ਡਿਜ਼ਾਈਨ ਹਨ, ਅਤੇ ਦੋਵੇਂ ਕੁਝ ਛੱਡ ਦਿੰਦੇ ਹਨ। ਹਰ ਵੀਡੀਓ ਲਈ ffmpeg ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਹਰ ਬਦਲਾਅ 'ਤੇ RTMP ਕਨੈਕਸ਼ਨ ਟੁੱਟ ਜਾਂਦੀ ਹੈ। ਇੱਕ concat ਪਲੇਲਿਸਟ ਸ਼ੁਰੂ ਵਿੱਚ ਇੱਕ ਵਾਰ ਪੜ੍ਹੀ ਜਾਂਦੀ ਹੈ, ਇਸ ਲਈ ਇੱਕ ਨਵੀਂ ਵੀਡੀਓ ਅਗਲੇ ਰੀਸਟਾਰਟ ਦਾ ਇੰਤਜ਼ਾਰ ਕਰਦੀ ਹੈ।
ਡਿਜ਼ਾਈਨ
ਹਰ ਵੀਡੀਓ ਨੂੰ ਸਟ੍ਰੀਮ ਦੇ ਆਕਾਰ ਅਤੇ ਫ੍ਰੇਮ ਰੇਟ 'ਤੇ ਇੱਕ ਵਾਰ MPEG-TS ਵਿੱਚ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ; ਇੱਕ ਵਰਟੀਕਲ ਵੀਡੀਓ ਕਾਲੇ ਬਾਰਾਂ ਦੀ ਬਜਾਏ ਆਪਣੇ ਆਪ ਦੇ ਬਲਰ ਕੀਤੇ ਕਾਪੀ 'ਤੇ ਬੈਠਦੀ ਹੈ। ਇੱਕ ffmpeg ਪ੍ਰੋਸੈਸ ਸਟੈਂਡਰਡ ਇਨਪੁਟ ਤੋਂ MPEG-TS ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ ਸਥਿਰ ਬਿਟਰੇਟ 'ਤੇ ਐਨਕੋਡ ਕਰਦਾ ਹੈ, ਹਰ ਦੋ ਸਕਿੰਟਾਂ ਬਾਅਦ ਇੱਕ ਕੀਫ੍ਰੇਮ ਦੇ ਨਾਲ, ਜਿਵੇਂ ਲਾਈਵ ਇਨਗੈਸਟ ਉਮੀਦ ਕਰਦਾ ਹੈ। ਇੱਕ ਛੋਟਾ ਫੀਡਰ ਤਿਆਰ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਉਸ ਪਾਈਪ ਵਿੱਚ ਇੱਕ ਤੋਂ ਬਾਅਦ ਇੱਕ, ਅਸਲ-ਸਮੇਂ ਦੀ ਗਤੀ ਨਾਲ ਲਿਖਦਾ ਹੈ, ਹਰ ਬਦਲਾਅ 'ਤੇ ਅਗਲੀ ਫਾਈਲ ਚੁਣਦਾ ਹੈ: ਪਹਿਲਾਂ ਕਦੇ ਨਾ ਚਲਾਈਆਂ ਗਈਆਂ ਵੀਡੀਓਜ਼, ਫਿਰ ਸਭ ਤੋਂ ਘੱਟ ਹਾਲ ਹੀ ਵਿੱਚ ਚਲਾਈਆਂ ਗਈਆਂ। ffmpeg ਦਾ MPEG-TS ਰੀਡਰ ਦੇਖਦਾ ਹੈ ਕਿ ਹਰ ਫਾਈਲ ਦੇ ਟਾਈਮਸਟੈਂਪ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਸ਼ਿਫਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਜੋ ਇਸਦਾ ਆਉਟਪੁੱਟ ਬਿਨਾਂ ਰੁਕਾਵਟ ਦੇ ਚੱਲਦਾ ਰਹੇ।
ਵੇਰਵਾ ਇੱਕ: ਪਹਿਲੇ ਬਾਈਟ ਤੋਂ ਗਤੀ
ਸਾਡੇ ਪਹਿਲੇ ਸੰਸਕਰਣ ਨੇ ਘੜੀ ਉਦੋਂ ਸ਼ੁਰੂ ਕੀਤੀ ਜਦੋਂ ffmpeg ਸ਼ੁਰੂ ਹੋਇਆ। ਪਹਿਲੀ ਫਾਈਲ ਤਿਆਰ ਕਰਨ ਵਿੱਚ ਨੌ ਸਕਿੰਟ ਲੱਗੇ, ਇਸ ਲਈ ਫੀਡਰ ਨੇ ਸੋਚਿਆ ਕਿ ਇਹ ਨੌ ਸਕਿੰਟ ਪਿੱਛੇ ਹੈ ਅਤੇ ਉਹਨਾਂ ਸਾਰਿਆਂ ਨੂੰ ਇੱਕੋ ਵਾਰ ਭੇਜ ਦਿੱਤਾ। ਪਹਿਲੇ ਬਾਈਟ ਲਿਖੇ ਜਾਣ 'ਤੇ ਘੜੀ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਇਹ ਠੀਕ ਹੋ ਗਿਆ: 53 ਸਕਿੰਟ ਦੇ ਰਨ ਨੇ 53 ਸਕਿੰਟ ਦਾ ਸਟ੍ਰੀਮ ਪੈਦਾ ਕੀਤਾ।
ਵੇਰਵਾ ਦੋ: ਸੀਮ 'ਤੇ ਆਡੀਓ
ਇੱਕ ਬਦਲਾਅ 'ਤੇ, ਅਗਲੀ ਫਾਈਲ ਦਾ ਆਡੀਓ ਪਿਛਲੀ ਫਾਈਲ ਦੇ ਆਡੀਓ ਦੇ ਖਤਮ ਹੋਣ ਤੋਂ 17 ਮਿਲੀਸਕਿੰਟ ਪਹਿਲਾਂ ਸ਼ੁਰੂ ਹੋਇਆ। ਐਨਕੋਡਰ ਨੇ ਚੇਤਾਵਨੀ ਦਿੱਤੀ ਕਿ ਇਸਦਾ ਇਨਪੁਟ "ਸਮੇਂ ਵਿੱਚ ਪਿੱਛੇ" ਜਾ ਰਿਹਾ ਹੈ ਅਤੇ ਮਕਸਰ ਨੇ ਇੱਕ ਟਾਈਮਸਟੈਂਪ ਨੂੰ ਪੈਚ ਕੀਤਾ। aresample=async=1:min_hard_comp=0.01:first_pts=0 ਨਾਲ ਰੀਸੈਂਪਲਿੰਗ ਐਨਕੋਡਰ ਦੇ ਵੇਖਣ ਤੋਂ ਪਹਿਲਾਂ ਅਜਿਹੇ ਓਵਰਲੈਪ ਨੂੰ ਟ੍ਰਿਮ ਜਾਂ ਪੈਡ ਕਰਦੀ ਹੈ। ਪੰਜ ਬਦਲਾਅ ਵਾਲੇ ਇੱਕ ਮਿੰਟ ਤੋਂ ਵੱਧ ਦੇ ਰਨ ਵਿੱਚ, ਪ੍ਰਾਪਤ ਕੀਤੇ ਗਏ ਸਟ੍ਰੀਮ ਵਿੱਚ ਹਰ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਟਾਈਮਸਟੈਂਪ ਵਧੇ, ਅਤੇ ਸਟ੍ਰੀਮ ਬਿਨਾਂ ਕਿਸੇ ਗਲਤੀ ਦੇ ਡੀਕੋਡ ਹੋਇਆ।
ਵੇਰਵਾ ਤਿੰਨ: ਕੁਝ ਚੇਤਾਵਨੀਆਂ ਆਮ ਹਨ
ਹਰ ਫਾਈਲ ਆਪਣੇ MPEG-TS ਕਾਊਂਟਰ ਅਤੇ ਆਪਣੀ ਘੜੀ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ, ਇਸ ਲਈ ffmpeg ਹਰ ਬਦਲਾਅ 'ਤੇ "Packet corrupt" ਅਤੇ "timestamp discontinuity" ਦੀ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ। ਉਹ ਲਾਈਨਾਂ ਉਮੀਦ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ, ਅਤੇ ਅਸੀਂ ਉਹਨਾਂ ਨੂੰ ਲੌਗ ਤੋਂ ਬਾਹਰ ਰੱਖਦੇ ਹਾਂ ਤਾਂ ਜੋ ਅਸਲ ਗਲਤੀਆਂ ਸਾਹਮਣੇ ਆ ਸਕਣ।
ਵਾਚਡੌਗ
ਜੇ ffmpeg ਬੰਦ ਹੋ ਜਾਵੇ ਜਾਂ ਇੱਕ ਮਿੰਟ ਲਈ ਇਸਦੀ ਪ੍ਰਗਤੀ ਰੁਕ ਜਾਵੇ, ਤਾਂ ਸਟ੍ਰੀਮ ਵਧਦੇ ਵਿਰਾਮਾਂ ਨਾਲ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ ਅਤੇ ਵਾਰ-ਵਾਰ ਅਸਫਲਤਾਵਾਂ ਤੋਂ ਬਾਅਦ ਇੱਕ ਸੁਨੇਹਾ ਭੇਜਦਾ ਹੈ। ਸਾਡੇ ਟੈਸਟ ਵਿੱਚ ਅਸੀਂ ਐਨਕੋਡਰ ਨੂੰ ਹੱਥੀਂ ਬੰਦ ਕੀਤਾ; ਸਟ੍ਰੀਮ ਸੱਤ ਸਕਿੰਟ ਬਾਅਦ ਵਾਪਸ ਆ ਗਿਆ, ਅਤੇ ਦੌਰਾਨ ਜੋੜਿਆ ਗਿਆ ਵੀਡੀਓ ਬਿਨਾਂ ਦੁਬਾਰਾ ਜੁੜੇ ਘੁੰਮਣ ਵਾਲੇ ਚੱਕਰ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋ ਗਿਆ। ਇੱਕ ਰੀਸਟਾਰਟ ਇੱਕ ਛੋਟਾ ਦੁਬਾਰਾ ਜੁੜਨਾ ਹੈ, ਇਸ ਲਈ YouTube ਬ੍ਰੌਡਕਾਸਟ ਨੂੰ ਆਪਣੇ ਆਪ ਸ਼ੁਰੂ ਹੋਣ ਲਈ ਅਤੇ ਆਪਣੇ ਆਪ ਬੰਦ ਨਾ ਹੋਣ ਲਈ ਸੈੱਟ ਕਰੋ। ਸਟ੍ਰੀਮ ਕੀ ਹਰ ਲੌਗ ਲਾਈਨ ਵਿੱਚ ਮਾਸਕ ਕੀਤੀ ਹੁੰਦੀ ਹੈ, ffmpeg ਦੀ ਆਪਣੀ ਸਮੇਤ। Studio ਇਸ ਲਾਈਵ ਚੈਨਲ ਨੂੰ systemd ਸੇਵਾ ਵਜੋਂ ਦਿੰਦਾ ਹੈ।