ವೀಡಿಯೊಗಳ ನಡುವೆ ಮರುಸಂಪರ್ಕಗೊಳ್ಳದ 24/7 ಸ್ಟ್ರೀಮ್: ಪೈಪ್ ಮೂಲಕ ಒದಗಿಸಲಾದ ಒಂದೇ ffmpeg
ವೀಡಿಯೊ
ಸಿದ್ಧವಾದ ವೀಡಿಯೊಗಳನ್ನು ಸತತವಾಗಿ ಪ್ರಸಾರ ಮಾಡುವ ಲೈವ್ ಚಾನೆಲ್ಗೆ ಎರಡು ಸುಲಭ ವಿನ್ಯಾಸಗಳಿವೆ, ಮತ್ತು ಎರಡೂ ಏನನ್ನಾದರೂ ಕಳೆದುಕೊಳ್ಳುತ್ತವೆ. ಪ್ರತಿ ವೀಡಿಯೊಗೆ ffmpeg ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವುದು ಪ್ರತಿ ಬದಲಾವಣೆಯಲ್ಲಿ RTMP ಸಂಪರ್ಕವನ್ನು ಕಡಿತಗೊಳಿಸುತ್ತದೆ. ಕಾಂಕ್ಯಾಟ್ ಪ್ಲೇಲಿಸ್ಟ್ ಅನ್ನು ಆರಂಭದಲ್ಲಿ ಒಮ್ಮೆ ಮಾತ್ರ ಓದಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಹೊಸ ವೀಡಿಯೊ ಮುಂದಿನ ಮರುಪ್ರಾರಂಭಕ್ಕಾಗಿ ಕಾಯಬೇಕಾಗುತ್ತದೆ.
ವಿನ್ಯಾಸ
ಪ್ರತಿ ವೀಡಿಯೊವನ್ನು ಸ್ಟ್ರೀಮ್ನ ಗಾತ್ರ ಮತ್ತು ಫ್ರೇಮ್ ರೇಟ್ನಲ್ಲಿ MPEG-TS ಆಗಿ ಒಮ್ಮೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ; ಲಂಬ ವೀಡಿಯೊವನ್ನು ಕಪ್ಪು ಪಟ್ಟಿಗಳ ಬದಲಿಗೆ ಅದರ ಬ್ಲರ್ ಆದ ಪ್ರತಿಯ ಮೇಲೆ ಇರಿಸಲಾಗುತ್ತದೆ. ಒಂದೇ ffmpeg ಪ್ರಕ್ರಿಯೆಯು ಅದರ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಇನ್ಪುಟ್ನಿಂದ MPEG-TS ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಲೈವ್ ಇನ್ಜೆಸ್ಟ್ ನಿರೀಕ್ಷಿಸುವಂತೆ ಪ್ರತಿ ಎರಡು ಸೆಕೆಂಡುಗಳಿಗೊಮ್ಮೆ ಕೀಫ್ರೇಮ್ನೊಂದಿಗೆ ಸ್ಥಿರ ಬಿಟ್ರೇಟ್ನಲ್ಲಿ ಎನ್ಕೋಡ್ ಮಾಡುತ್ತದೆ. ಒಂದು ಸಣ್ಣ ಫೀಡರ್ ಸಿದ್ಧಪಡಿಸಿದ ಫೈಲ್ಗಳನ್ನು ಆ ಪೈಪ್ಗೆ ಒಂದರ ನಂತರ ಒಂದರಂತೆ, ನೈಜ-ಸಮಯದ ವೇಗದಲ್ಲಿ ಬರೆಯುತ್ತದೆ, ಪ್ರತಿ ಬದಲಾವಣೆಯ ಸಮಯದಲ್ಲಿ ಮುಂದಿನ ಫೈಲ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡುತ್ತದೆ: ಮೊದಲು ಆಡದ ವೀಡಿಯೊಗಳು, ನಂತರ ಕಡಿಮೆ ಇತ್ತೀಚೆಗೆ ಆಡಿದವುಗಳು. ffmpeg ನ MPEG-TS ರೀಡರ್ ಪ್ರತಿ ಫೈಲ್ನ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳು ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತವೆ ಎಂದು ನೋಡಿ ಅವುಗಳನ್ನು ಶಿಫ್ಟ್ ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದರ ಔಟ್ಪುಟ್ ತಡವಿಲ್ಲದೆ ನಡೆಯುತ್ತದೆ.
ವಿವರ ಒಂದು: ಮೊದಲ ಬೈಟ್ನಿಂದ ವೇಗ
ನಮ್ಮ ಮೊದಲ ಆವೃತ್ತಿಯು ffmpeg ಪ್ರಾರಂಭವಾದಾಗ ಅದರ ಗಡಿಯಾರವನ್ನು ಪ್ರಾರಂಭಿಸಿತು. ಮೊದಲ ಫೈಲ್ ಅನ್ನು ಸಿದ್ಧಪಡಿಸಲು ಒಂಬತ್ತು ಸೆಕೆಂಡುಗಳು ತೆಗೆದುಕೊಂಡವು, ಆದ್ದರಿಂದ ಫೀಡರ್ ತಾನು ಒಂಬತ್ತು ಸೆಕೆಂಡುಗಳು ಹಿಂದೆ ಇದ್ದೇನೆ ಎಂದು ಭಾವಿಸಿ ಅವುಗಳನ್ನು ಎಲ್ಲವನ್ನೂ ಒಟ್ಟಿಗೆ ಕಳುಹಿಸಿತು. ಬರೆಯಲಾದ ಮೊದಲ ಬೈಟ್ನಲ್ಲಿ ಗಡಿಯಾರವನ್ನು ಪ್ರಾರಂಭಿಸುವುದು ಇದನ್ನು ಸರಿಪಡಿಸಿತು: 53 ಸೆಕೆಂಡುಗಳ ರನ್ 53 ಸೆಕೆಂಡುಗಳ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಉತ್ಪಾದಿಸಿತು.
ವಿವರ ಎರಡು: ಸೀಮ್ನಲ್ಲಿ ಆಡಿಯೋ
ಬದಲಾವಣೆಯ ಸಮಯದಲ್ಲಿ, ಮುಂದಿನ ಫೈಲ್ನ ಆಡಿಯೋ ಹಿಂದಿನ ಫೈಲ್ನ ಆಡಿಯೋ ಕೊನೆಗೊಳ್ಳುವುದಕ್ಕಿಂತ 17 ಮಿಲಿಸೆಕೆಂಡ್ಗಳ ಮೊದಲು ಪ್ರಾರಂಭವಾಯಿತು. ಎನ್ಕೋಡರ್ ತನ್ನ ಇನ್ಪುಟ್ "ಸಮಯದಲ್ಲಿ ಹಿಂದಕ್ಕೆ" ಹೋಗುತ್ತಿದೆ ಎಂದು ಎಚ್ಚರಿಕೆ ನೀಡಿತು ಮತ್ತು ಮಕ್ಸರ್ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಅನ್ನು ಪ್ಯಾಚ್ ಮಾಡಿತು. aresample=async=1:min_hard_comp=0.01:first_pts=0 ಬಳಸಿಕೊಂಡು ಮರುಮಾದರಿಕರಣ (resampling) ಮಾಡುವುದು ಎನ್ಕೋಡರ್ ಅವುಗಳನ್ನು ನೋಡುವ ಮೊದಲು ಅಂತಹ ಓವರ್ಲ್ಯಾಪ್ಗಳನ್ನು ಕತ್ತರಿಸುತ್ತದೆ ಅಥವಾ ಸೇರಿಸುತ್ತದೆ. ಐದು ಬದಲಾವಣೆಗಳೊಂದಿಗೆ ಒಂದು ನಿಮಿಷಕ್ಕಿಂತ ಸ್ವಲ್ಪ ಹೆಚ್ಚಿನ ರನ್ನಲ್ಲಿ, ಸ್ವೀಕರಿಸಿದ ಸ್ಟ್ರೀಮ್ನಲ್ಲಿನ ಪ್ರತಿ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳು ಏರಿಕೆಯಾದವು, ಮತ್ತು ಸ್ಟ್ರೀಮ್ ಒಂದೇ ದೋಷವಿಲ್ಲದೆ ಡಿಕೋಡ್ ಆಯಿತು.
ವಿವರ ಮೂರು: ಕೆಲವು ಎಚ್ಚರಿಕೆಗಳು ಸಾಮಾನ್ಯ
ಪ್ರತಿ ಫೈಲ್ ಅದರ MPEG-TS ಕೌಂಟರ್ಗಳು ಮತ್ತು ಗಡಿಯಾರವನ್ನು ಮರುಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ffmpeg ಪ್ರತಿ ಬದಲಾವಣೆಯ ಸಮಯದಲ್ಲಿ "Packet corrupt" ಮತ್ತು "timestamp discontinuity" ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ. ಆ ಸಾಲುಗಳು ನಿರೀಕ್ಷಿತವಾಗಿವೆ, ಮತ್ತು ನೈಜ ದೋಷಗಳು ಗಮನ ಸೆಳೆಯುವಂತೆ ಮಾಡಲು ನಾವು ಅವುಗಳನ್ನು ಲಾಗ್ನಿಂದ ಹೊರಗಿಡುತ್ತೇವೆ.
ವಾಚ್ಡಾಗ್
ffmpeg ನಿಂದ ಹೊರಬಂದರೆ ಅಥವಾ ಅದರ ಪ್ರಗತಿ ಒಂದು ನಿಮಿಷ ನಿಂತರೆ, ಸ್ಟ್ರೀಮ್ ಹೆಚ್ಚುತ್ತಿರುವ ವಿರಾಮಗಳೊಂದಿಗೆ ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಪುನರಾವರ್ತಿತ ವೈಫಲ್ಯಗಳ ನಂತರ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ನಮ್ಮ ಪರೀಕ್ಷೆಯಲ್ಲಿ ನಾವು ಎನ್ಕೋಡರ್ ಅನ್ನು ಕೈಯಾರೆ ಕೊಂದೆವು; ಏಳು ಸೆಕೆಂಡುಗಳ ನಂತರ ಸ್ಟ್ರೀಮ್ ಮತ್ತೆ ಸಕ್ರಿಯಗೊಂಡಿತು, ಮತ್ತು ರನ್ ನಡೆಯುತ್ತಿರುವಾಗ ಸೇರಿಸಲಾದ ವೀಡಿಯೊ ಮರುಸಂಪರ್ಕವಿಲ್ಲದೇ ರೋಟೇಶನ್ಗೆ ಸೇರಿಕೊಂಡಿತು. ಮರುಪ್ರಾರಂಭವೆಂದರೆ ಒಂದು ಕಿರು ಮರುಸಂಪರ್ಕ, ಆದ್ದರಿಂದ YouTube ಪ್ರಸಾರವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ರಾರಂಭವಾಗುವಂತೆ ಮತ್ತು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಲ್ಲದಂತೆ ಹೊಂದಿಸಿ. ಪ್ರತಿ ಲಾಗ್ ಸಾಲಿನಲ್ಲಿ ಸ್ಟ್ರೀಮ್ ಕೀ ಮರೆಮಾಡಲಾಗಿದೆ, ffmpeg ನ ಸ್ವಂತದ್ದು ಸೇರಿದಂತೆ. Studio ಈ ಲೈವ್ ಚಾನೆಲ್ ಅನ್ನು systemd ಸೇವೆಯಾಗಿ ಒದಗಿಸುತ್ತದೆ.