ಬ್ರೌಸರ್ನಲ್ಲಿ ಉತ್ತಮ ಗುಣಮಟ್ಟದ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮಿಂಗ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ. WebCodecs API ಮತ್ತು VideoFrame ಬಳಸಿ ನಾಯ್ಸ್ ಕಡಿಮೆ ಮಾಡಲು ಸುಧಾರಿತ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಕಲಿಯಿರಿ.
ವೆಬ್ಕೋಡೆಕ್ಸ್ನಲ್ಲಿ ಪರಿಣತಿ: ಟೆಂಪೊರಲ್ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ಮೂಲಕ ವೀಡಿಯೊ ಗುಣಮಟ್ಟವನ್ನು ಹೆಚ್ಚಿಸುವುದು
ವೆಬ್-ಆಧಾರಿತ ವೀಡಿಯೊ ಸಂವಹನ, ಸ್ಟ್ರೀಮಿಂಗ್ ಮತ್ತು ನೈಜ-ಸಮಯದ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಜಗತ್ತಿನಲ್ಲಿ, ಗುಣಮಟ್ಟವು ಅತ್ಯಂತ ಮುಖ್ಯವಾಗಿದೆ. ಪ್ರಪಂಚದಾದ್ಯಂತದ ಬಳಕೆದಾರರು ಅವರು ವ್ಯಾಪಾರ ಸಭೆಯಲ್ಲಿದ್ದರೂ, ಲೈವ್ ಈವೆಂಟ್ ವೀಕ್ಷಿಸುತ್ತಿದ್ದರೂ ಅಥವಾ ದೂರಸ್ಥ ಸೇವೆಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುತ್ತಿದ್ದರೂ ಸಹ, ಸ್ಪಷ್ಟವಾದ, ನಿಖರವಾದ ವೀಡಿಯೊವನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತಾರೆ. ಆದಾಗ್ಯೂ, ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳು ನಿರಂತರ ಮತ್ತು ಗಮನವನ್ನು ಬೇರೆಡೆಗೆ ಸೆಳೆಯುವ ಕಲಾಕೃತಿಯಿಂದ ಬಳಲುತ್ತವೆ: ನಾಯ್ಸ್ (noise). ಈ ಡಿಜಿಟಲ್ ನಾಯ್ಸ್, ಸಾಮಾನ್ಯವಾಗಿ ಧಾನ್ಯದಂತಹ ಅಥವಾ ಸ್ಟ್ಯಾಟಿಕ್ ಟೆಕ್ಸ್ಚರ್ನಂತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ, ಇದು ವೀಕ್ಷಣೆಯ ಅನುಭವವನ್ನು ಕುಗ್ಗಿಸಬಹುದು ಮತ್ತು ಆಶ್ಚರ್ಯಕರವಾಗಿ, ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಬಳಕೆಯನ್ನು ಹೆಚ್ಚಿಸಬಹುದು. ಅದೃಷ್ಟವಶಾತ್, ವೆಬ್ಕೋಡೆಕ್ಸ್ (WebCodecs) ಎಂಬ ಶಕ್ತಿಯುತ ಬ್ರೌಸರ್ API, ಡೆವಲಪರ್ಗಳಿಗೆ ಈ ಸಮಸ್ಯೆಯನ್ನು ನೇರವಾಗಿ ನಿಭಾಯಿಸಲು ಅಭೂತಪೂರ್ವವಾದ ಕೆಳ-ಹಂತದ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ.
ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯು ನಿಮ್ಮನ್ನು ವೆಬ್ಕೋಡೆಕ್ಸ್ ಬಳಸಿಕೊಂಡು ಒಂದು ನಿರ್ದಿಷ್ಟ, ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾದ ವೀಡಿಯೊ ಪ್ರೊಸೆಸಿಂಗ್ ತಂತ್ರಕ್ಕೆ ಆಳವಾಗಿ ಕೊಂಡೊಯ್ಯುತ್ತದೆ: ಟೆಂಪೊರಲ್ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್. ವೀಡಿಯೊ ನಾಯ್ಸ್ ಎಂದರೇನು, ಅದು ಏಕೆ ಹಾನಿಕಾರಕ ಮತ್ತು ಬ್ರೌಸರ್ನಲ್ಲಿ ನೇರವಾಗಿ ಫಿಲ್ಟರಿಂಗ್ ಪೈಪ್ಲೈನ್ ನಿರ್ಮಿಸಲು ನೀವು VideoFrame
ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ನಾವು ಅನ್ವೇಷಿಸುತ್ತೇವೆ. ನಾವು ಮೂಲಭೂತ ಸಿದ್ಧಾಂತದಿಂದ ಪ್ರಾಯೋಗಿಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನುಷ್ಠಾನ, ವೆಬ್ಅಸೆಂಬ್ಲಿಯೊಂದಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಗಳು ಮತ್ತು ವೃತ್ತಿಪರ-ದರ್ಜೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ಸಾಧಿಸಲು ಸುಧಾರಿತ ಪರಿಕಲ್ಪನೆಗಳವರೆಗೆ ಎಲ್ಲವನ್ನೂ ಒಳಗೊಳ್ಳುತ್ತೇವೆ.
ವೀಡಿಯೊ ನಾಯ್ಸ್ ಎಂದರೇನು ಮತ್ತು ಅದು ಏಕೆ ಮುಖ್ಯ?
ನಾವು ಒಂದು ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸುವ ಮೊದಲು, ನಾವು ಅದನ್ನು ಮೊದಲು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ಡಿಜಿಟಲ್ ವೀಡಿಯೊದಲ್ಲಿ, ನಾಯ್ಸ್ ಎಂದರೆ ವೀಡಿಯೊ ಸಿಗ್ನಲ್ನಲ್ಲಿನ ಹೊಳಪು ಅಥವಾ ಬಣ್ಣದ ಮಾಹಿತಿಯಲ್ಲಿನ ಯಾದೃಚ್ಛಿಕ ವ್ಯತ್ಯಾಸಗಳು. ಇದು ಚಿತ್ರವನ್ನು ಸೆರೆಹಿಡಿಯುವ ಮತ್ತು ರವಾನಿಸುವ ಪ್ರಕ್ರಿಯೆಯ ಅನಪೇಕ್ಷಿತ ಉಪ-ಉತ್ಪನ್ನವಾಗಿದೆ.
ನಾಯ್ಸ್ನ ಮೂಲಗಳು ಮತ್ತು ಪ್ರಕಾರಗಳು
- ಸೆನ್ಸರ್ ನಾಯ್ಸ್: ಇದು ಮುಖ್ಯ ಕಾರಣ. ಕಡಿಮೆ-ಬೆಳಕಿನ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ, ಕ್ಯಾಮೆರಾ ಸೆನ್ಸರ್ಗಳು ಸಾಕಷ್ಟು ಪ್ರಕಾಶಮಾನವಾದ ಚಿತ್ರವನ್ನು ರಚಿಸಲು ಒಳಬರುವ ಸಿಗ್ನಲ್ ಅನ್ನು ವರ್ಧಿಸುತ್ತವೆ. ಈ ವರ್ಧನೆಯ ಪ್ರಕ್ರಿಯೆಯು ಯಾದೃಚ್ಛಿಕ ಎಲೆಕ್ಟ್ರಾನಿಕ್ ಏರಿಳಿತಗಳನ್ನು ಸಹ ಹೆಚ್ಚಿಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಕಾಣುವಂತಹ ಗ್ರೇನ್ (grain) ಉಂಟಾಗುತ್ತದೆ.
- ಥರ್ಮಲ್ ನಾಯ್ಸ್: ಕ್ಯಾಮೆರಾದ ಎಲೆಕ್ಟ್ರಾನಿಕ್ಸ್ನಿಂದ ಉತ್ಪತ್ತಿಯಾಗುವ ಶಾಖವು ಎಲೆಕ್ಟ್ರಾನ್ಗಳು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಚಲಿಸುವಂತೆ ಮಾಡಬಹುದು, ಇದು ಬೆಳಕಿನ ಮಟ್ಟದಿಂದ ಸ್ವತಂತ್ರವಾದ ನಾಯ್ಸ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
- ಕ್ವಾಂಟೈಸೇಶನ್ ನಾಯ್ಸ್: ಅನಲಾಗ್-ಟು-ಡಿಜಿಟಲ್ ಪರಿವರ್ತನೆ ಮತ್ತು ಕಂಪ್ರೆಷನ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಮಯದಲ್ಲಿ ಇದನ್ನು ಪರಿಚಯಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ನಿರಂತರ ಮೌಲ್ಯಗಳನ್ನು ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಪ್ರತ್ಯೇಕ ಹಂತಗಳಿಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗುತ್ತದೆ.
ಈ ನಾಯ್ಸ್ ಸಾಮಾನ್ಯವಾಗಿ ಗಾಸಿಯನ್ ನಾಯ್ಸ್ ಆಗಿ ಪ್ರಕಟವಾಗುತ್ತದೆ, ಇದರಲ್ಲಿ ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ನ ತೀವ್ರತೆಯು ಅದರ ನೈಜ ಮೌಲ್ಯದ ಸುತ್ತಲೂ ಯಾದೃಚ್ಛಿಕವಾಗಿ ಬದಲಾಗುತ್ತದೆ, ಇದು ಇಡೀ ಫ್ರೇಮ್ನಾದ್ಯಂತ ಸೂಕ್ಷ್ಮ, ಮಿನುಗುವ ಗ್ರೇನ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
ನಾಯ್ಸ್ನ ದ್ವಿಮುಖ ಪರಿಣಾಮ
ವೀಡಿಯೊ ನಾಯ್ಸ್ ಕೇವಲ ಸೌಂದರ್ಯದ ಸಮಸ್ಯೆಯಲ್ಲ; ಇದು ಗಮನಾರ್ಹ ತಾಂತ್ರಿಕ ಮತ್ತು ಗ್ರಹಿಕೆಯ ಪರಿಣಾಮಗಳನ್ನು ಹೊಂದಿದೆ:
- ಕ್ಷೀಣಿಸಿದ ಬಳಕೆದಾರರ ಅನುಭವ: ದೃಶ್ಯ ಗುಣಮಟ್ಟದ ಮೇಲೆ ಇದರ ಅತ್ಯಂತ ಸ್ಪಷ್ಟ ಪರಿಣಾಮವಿದೆ. ನಾಯ್ಸ್ ಇರುವ ವೀಡಿಯೊ ಅವೃತ್ತಿಪರವಾಗಿ ಕಾಣುತ್ತದೆ, ಗಮನವನ್ನು ಬೇರೆಡೆಗೆ ಸೆಳೆಯುತ್ತದೆ ಮತ್ತು ಪ್ರಮುಖ ವಿವರಗಳನ್ನು ಗ್ರಹಿಸಲು ಕಷ್ಟವಾಗಬಹುದು. ಟೆಲಿಕಾನ್ಫರೆನ್ಸಿಂಗ್ನಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ, ಇದು ಭಾಗವಹಿಸುವವರನ್ನು ಧಾನ್ಯದಂತೆ ಮತ್ತು ಅಸ್ಪಷ್ಟವಾಗಿ ಕಾಣುವಂತೆ ಮಾಡಬಹುದು, ಇದು ಉಪಸ್ಥಿತಿಯ ಭಾವನೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ಕಡಿಮೆಯಾದ ಕಂಪ್ರೆಷನ್ ದಕ್ಷತೆ: ಇದು ಕಡಿಮೆ ಸ್ಪಷ್ಟವಾದ ಆದರೆ ಅಷ್ಟೇ ನಿರ್ಣಾಯಕವಾದ ಸಮಸ್ಯೆಯಾಗಿದೆ. ಆಧುನಿಕ ವೀಡಿಯೊ ಕೋಡೆಕ್ಗಳು (H.264, VP9, AV1 ನಂತಹ) ಪುನರಾವರ್ತನೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಹೆಚ್ಚಿನ ಕಂಪ್ರೆಷನ್ ಅನುಪಾತಗಳನ್ನು ಸಾಧಿಸುತ್ತವೆ. ಅವು ಫ್ರೇಮ್ಗಳ ನಡುವಿನ (ಟೆಂಪೊರಲ್ ಪುನರಾವರ್ತನೆ) ಮತ್ತು ಒಂದೇ ಫ್ರೇಮ್ನೊಳಗಿನ (ಸ್ಪೇಷಿಯಲ್ ಪುನರಾವರ್ತನೆ) ಹೋಲಿಕೆಗಳನ್ನು ಹುಡುಕುತ್ತವೆ. ನಾಯ್ಸ್, ತನ್ನ ಸ್ವಭಾವದಿಂದಲೇ, ಯಾದೃಚ್ಛಿಕ ಮತ್ತು ಅನಿರೀಕ್ಷಿತವಾಗಿದೆ. ಇದು ಈ ಪುನರಾವರ್ತನೆಯ ಮಾದರಿಗಳನ್ನು ಮುರಿಯುತ್ತದೆ. ಎನ್ಕೋಡರ್ ಯಾದೃಚ್ಛಿಕ ನಾಯ್ಸ್ ಅನ್ನು ಹೆಚ್ಚಿನ-ಆವರ್ತನದ ವಿವರವಾಗಿ ನೋಡುತ್ತದೆ, ಅದನ್ನು ಸಂರಕ್ಷಿಸಬೇಕು, ಇದರಿಂದಾಗಿ ನಿಜವಾದ ವಿಷಯದ ಬದಲು ನಾಯ್ಸ್ ಅನ್ನು ಎನ್ಕೋಡ್ ಮಾಡಲು ಹೆಚ್ಚಿನ ಬಿಟ್ಗಳನ್ನು ನಿಯೋಜಿಸಲು ಒತ್ತಾಯಿಸುತ್ತದೆ. ಇದರ ಪರಿಣಾಮವಾಗಿ ಒಂದೇ ಗ್ರಹಿಸಿದ ಗುಣಮಟ್ಟಕ್ಕೆ ದೊಡ್ಡ ಫೈಲ್ ಗಾತ್ರ ಅಥವಾ ಒಂದೇ ಬಿಟ್ರೇಟ್ನಲ್ಲಿ ಕಡಿಮೆ ಗುಣಮಟ್ಟ ಉಂಟಾಗುತ್ತದೆ.
ಎನ್ಕೋಡಿಂಗ್ ಮಾಡುವ ಮೊದಲು ನಾಯ್ಸ್ ಅನ್ನು ತೆಗೆದುಹಾಕುವ ಮೂಲಕ, ನಾವು ವೀಡಿಯೊ ಸಿಗ್ನಲ್ ಅನ್ನು ಹೆಚ್ಚು ಊಹಿಸಬಹುದಾದಂತೆ ಮಾಡಬಹುದು, ಇದರಿಂದ ಎನ್ಕೋಡರ್ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಇದು ಉತ್ತಮ ದೃಶ್ಯ ಗುಣಮಟ್ಟ, ಕಡಿಮೆ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಬಳಕೆ ಮತ್ತು ಎಲ್ಲೆಡೆಯೂ ಬಳಕೆದಾರರಿಗೆ ಸುಗಮವಾದ ಸ್ಟ್ರೀಮಿಂಗ್ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ.
ವೆಬ್ಕೋಡೆಕ್ಸ್ ಪರಿಚಯ: ಕೆಳ-ಹಂತದ ವೀಡಿಯೊ ನಿಯಂತ್ರಣದ ಶಕ್ತಿ
ವರ್ಷಗಳಿಂದ, ಬ್ರೌಸರ್ನಲ್ಲಿ ನೇರ ವೀಡಿಯೊ ಮ್ಯಾನಿಪ್ಯುಲೇಷನ್ ಸೀಮಿತವಾಗಿತ್ತು. ಡೆವಲಪರ್ಗಳು ಹೆಚ್ಚಾಗಿ <video>
ಎಲಿಮೆಂಟ್ ಮತ್ತು ಕ್ಯಾನ್ವಾಸ್ API ನ ಸಾಮರ್ಥ್ಯಗಳಿಗೆ ಸೀಮಿತರಾಗಿದ್ದರು, ಇದು ಸಾಮಾನ್ಯವಾಗಿ GPU ನಿಂದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಕುಗ್ಗಿಸುವ ರೀಡ್ಬ್ಯಾಕ್ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ವೆಬ್ಕೋಡೆಕ್ಸ್ ಆಟವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ.
ವೆಬ್ಕೋಡೆಕ್ಸ್ ಒಂದು ಕೆಳ-ಹಂತದ API ಆಗಿದ್ದು, ಇದು ಬ್ರೌಸರ್ನ ಅಂತರ್ನಿರ್ಮಿತ ಮೀಡಿಯಾ ಎನ್ಕೋಡರ್ಗಳು ಮತ್ತು ಡಿಕೋಡರ್ಗಳಿಗೆ ನೇರ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ. ವೀಡಿಯೊ ಸಂಪಾದಕರು, ಕ್ಲೌಡ್ ಗೇಮಿಂಗ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳು ಮತ್ತು ಸುಧಾರಿತ ನೈಜ-ಸಮಯದ ಸಂವಹನ ಕ್ಲೈಂಟ್ಗಳಂತಹ ಮಾಧ್ಯಮ ಪ್ರಕ್ರಿಯೆಯ ಮೇಲೆ ನಿಖರವಾದ ನಿಯಂತ್ರಣದ ಅಗತ್ಯವಿರುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಇದನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ.
ನಾವು ಗಮನಹರಿಸುವ ಪ್ರಮುಖ ಅಂಶವೆಂದರೆ VideoFrame
ಆಬ್ಜೆಕ್ಟ್. ಒಂದು VideoFrame
ವೀಡಿಯೊದ ಒಂದೇ ಫ್ರೇಮ್ ಅನ್ನು ಚಿತ್ರವಾಗಿ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ, ಆದರೆ ಇದು ಕೇವಲ ಒಂದು ಸರಳ ಬಿಟ್ಮ್ಯಾಪ್ಗಿಂತ ಹೆಚ್ಚಿನದಾಗಿದೆ. ಇದು ಹೆಚ್ಚು ದಕ್ಷ, ವರ್ಗಾಯಿಸಬಹುದಾದ ಆಬ್ಜೆಕ್ಟ್ ಆಗಿದ್ದು, ಇದು ವಿವಿಧ ಪಿಕ್ಸೆಲ್ ಫಾರ್ಮ್ಯಾಟ್ಗಳಲ್ಲಿ (RGBA, I420, NV12 ನಂತಹ) ವೀಡಿಯೊ ಡೇಟಾವನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಈ ರೀತಿಯ ಪ್ರಮುಖ ಮೆಟಾಡೇಟಾವನ್ನು ಹೊಂದಿರುತ್ತದೆ:
timestamp
: ಮೈಕ್ರೋಸೆಕೆಂಡ್ಗಳಲ್ಲಿ ಫ್ರೇಮ್ನ ಪ್ರಸ್ತುತಿ ಸಮಯ.duration
: ಮೈಕ್ರೋಸೆಕೆಂಡ್ಗಳಲ್ಲಿ ಫ್ರೇಮ್ನ ಅವಧಿ.codedWidth
andcodedHeight
: ಪಿಕ್ಸೆಲ್ಗಳಲ್ಲಿ ಫ್ರೇಮ್ನ ಆಯಾಮಗಳು.format
: ಡೇಟಾದ ಪಿಕ್ಸೆಲ್ ಫಾರ್ಮ್ಯಾಟ್ (ಉದಾ., 'I420', 'RGBA').
ಮುಖ್ಯವಾಗಿ, VideoFrame
copyTo()
ಎಂಬ ವಿಧಾನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ನಮಗೆ ಕಚ್ಚಾ, ಸಂಕುಚಿತಗೊಳಿಸದ ಪಿಕ್ಸೆಲ್ ಡೇಟಾವನ್ನು ArrayBuffer
ಗೆ ನಕಲಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಇದು ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಮ್ಯಾನಿಪ್ಯುಲೇಷನ್ಗೆ ನಮ್ಮ ಪ್ರವೇಶ ಬಿಂದುವಾಗಿದೆ. ಒಮ್ಮೆ ನಾವು ಕಚ್ಚಾ ಬೈಟ್ಗಳನ್ನು ಪಡೆದ ನಂತರ, ನಾವು ನಮ್ಮ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅನ್ವಯಿಸಬಹುದು ಮತ್ತು ನಂತರ ಮಾರ್ಪಡಿಸಿದ ಡೇಟಾದಿಂದ ಹೊಸ VideoFrame
ಅನ್ನು ರಚಿಸಿ ಅದನ್ನು ಪ್ರೊಸೆಸಿಂಗ್ ಪೈಪ್ಲೈನ್ನಲ್ಲಿ ಮುಂದೆ ಕಳುಹಿಸಬಹುದು (ಉದಾ., ವೀಡಿಯೊ ಎನ್ಕೋಡರ್ಗೆ ಅಥವಾ ಕ್ಯಾನ್ವಾಸ್ಗೆ).
ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ತಂತ್ರಗಳನ್ನು ವಿಶಾಲವಾಗಿ ಎರಡು ಪ್ರಕಾರಗಳಾಗಿ ವರ್ಗೀಕರಿಸಬಹುದು: ಸ್ಪೇಷಿಯಲ್ ಮತ್ತು ಟೆಂಪೊರಲ್.
- ಸ್ಪೇಷಿಯಲ್ ಫಿಲ್ಟರಿಂಗ್: ಈ ತಂತ್ರವು ಒಂದೇ ಫ್ರೇಮ್ ಮೇಲೆ ಪ್ರತ್ಯೇಕವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ನಾಯ್ಸ್ ಅನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಸುಗಮಗೊಳಿಸಲು ನೆರೆಯ ಪಿಕ್ಸೆಲ್ಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುತ್ತದೆ. ಒಂದು ಸರಳ ಉದಾಹರಣೆಯೆಂದರೆ ಬ್ಲರ್ ಫಿಲ್ಟರ್. ನಾಯ್ಸ್ ಕಡಿಮೆ ಮಾಡಲು ಪರಿಣಾಮಕಾರಿಯಾಗಿದ್ದರೂ, ಸ್ಪೇಷಿಯಲ್ ಫಿಲ್ಟರ್ಗಳು ಪ್ರಮುಖ ವಿವರಗಳನ್ನು ಮತ್ತು ಅಂಚುಗಳನ್ನು ಮೃದುಗೊಳಿಸಬಹುದು, ಇದರಿಂದಾಗಿ ಕಡಿಮೆ ತೀಕ್ಷ್ಣವಾದ ಚಿತ್ರ ಉಂಟಾಗುತ್ತದೆ.
- ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್: ಇದು ನಾವು ಗಮನಹರಿಸುತ್ತಿರುವ ಹೆಚ್ಚು ಅತ್ಯಾಧುನಿಕ ವಿಧಾನವಾಗಿದೆ. ಇದು ಕಾಲಾನಂತರದಲ್ಲಿ ಅನೇಕ ಫ್ರೇಮ್ಗಳಾದ್ಯಂತ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಮೂಲಭೂತ ತತ್ವವೆಂದರೆ ನಿಜವಾದ ದೃಶ್ಯದ ವಿಷಯವು ಒಂದು ಫ್ರೇಮ್ನಿಂದ ಇನ್ನೊಂದಕ್ಕೆ ಸಂಬಂಧಿಸಿರುವ ಸಾಧ್ಯತೆಯಿದೆ, ಆದರೆ ನಾಯ್ಸ್ ಯಾದೃಚ್ಛಿಕ ಮತ್ತು ಸಂಬಂಧವಿಲ್ಲದ್ದಾಗಿದೆ. ಹಲವಾರು ಫ್ರೇಮ್ಗಳಾದ್ಯಂತ ನಿರ್ದಿಷ್ಟ ಸ್ಥಳದಲ್ಲಿ ಪಿಕ್ಸೆಲ್ನ ಮೌಲ್ಯವನ್ನು ಹೋಲಿಸುವ ಮೂಲಕ, ನಾವು ಸ್ಥಿರವಾದ ಸಿಗ್ನಲ್ (ನೈಜ ಚಿತ್ರ) ಮತ್ತು ಯಾದೃಚ್ಛಿಕ ಏರಿಳಿತಗಳನ್ನು (ನಾಯ್ಸ್) ಪ್ರತ್ಯೇಕಿಸಬಹುದು.
ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ನ ಸರಳ ರೂಪವೆಂದರೆ ಟೆಂಪೊರಲ್ ಆವರೇಜಿಂಗ್ (temporal averaging). ನೀವು ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ ಮತ್ತು ಹಿಂದಿನ ಫ್ರೇಮ್ ಅನ್ನು ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಯಾವುದೇ ಪಿಕ್ಸೆಲ್ಗೆ, ಅದರ 'ನಿಜವಾದ' ಮೌಲ್ಯವು ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನಲ್ಲಿನ ಅದರ ಮೌಲ್ಯ ಮತ್ತು ಹಿಂದಿನ ಫ್ರೇಮ್ನಲ್ಲಿನ ಅದರ ಮೌಲ್ಯದ ನಡುವೆ ಎಲ್ಲೋ ಇರುವ ಸಾಧ್ಯತೆಯಿದೆ. ಅವುಗಳನ್ನು ಮಿಶ್ರಣ ಮಾಡುವ ಮೂಲಕ, ನಾವು ಯಾದೃಚ್ಛಿಕ ನಾಯ್ಸ್ ಅನ್ನು ಸರಾಸರಿ ಮಾಡಬಹುದು. ಹೊಸ ಪಿಕ್ಸೆಲ್ ಮೌಲ್ಯವನ್ನು ಸರಳವಾದ ತೂಕದ ಸರಾಸರಿಯೊಂದಿಗೆ ಲೆಕ್ಕಹಾಕಬಹುದು:
new_pixel = (alpha * current_pixel) + ((1 - alpha) * previous_pixel)
ಇಲ್ಲಿ, alpha
0 ಮತ್ತು 1 ರ ನಡುವಿನ ಮಿಶ್ರಣ ಅಂಶವಾಗಿದೆ. ಹೆಚ್ಚಿನ alpha
ಎಂದರೆ ನಾವು ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ ಅನ್ನು ಹೆಚ್ಚು ನಂಬುತ್ತೇವೆ, ಇದರ ಪರಿಣಾಮವಾಗಿ ಕಡಿಮೆ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ಆದರೆ ಕಡಿಮೆ ಚಲನೆಯ ಕಲಾಕೃತಿಗಳು ಉಂಟಾಗುತ್ತವೆ. ಕಡಿಮೆ alpha
ಬಲವಾದ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ನೀಡುತ್ತದೆ ಆದರೆ ಚಲನೆಯಿರುವ ಪ್ರದೇಶಗಳಲ್ಲಿ 'ಗೋಸ್ಟಿಂಗ್' ಅಥವಾ ಟ್ರೇಲ್ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಸರಿಯಾದ ಸಮತೋಲನವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಮುಖ್ಯವಾಗಿದೆ.
ಸರಳ ಟೆಂಪೊರಲ್ ಆವರೇಜಿಂಗ್ ಫಿಲ್ಟರ್ ಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು
ವೆಬ್ಕೋಡೆಕ್ಸ್ ಬಳಸಿ ಈ ಪರಿಕಲ್ಪನೆಯ ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನವನ್ನು ನಿರ್ಮಿಸೋಣ. ನಮ್ಮ ಪೈಪ್ಲೈನ್ ಮೂರು ಮುಖ್ಯ ಹಂತಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:
VideoFrame
ಆಬ್ಜೆಕ್ಟ್ಗಳ ಸ್ಟ್ರೀಮ್ ಪಡೆಯಿರಿ (ಉದಾ., ವೆಬ್ಕ್ಯಾಮ್ನಿಂದ).- ಪ್ರತಿ ಫ್ರೇಮ್ಗೆ, ಹಿಂದಿನ ಫ್ರೇಮ್ನ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರ್ ಅನ್ನು ಅನ್ವಯಿಸಿ.
- ಹೊಸ, ಸ್ವಚ್ಛಗೊಳಿಸಿದ
VideoFrame
ಅನ್ನು ರಚಿಸಿ.
ಹಂತ 1: ಫ್ರೇಮ್ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಹೊಂದಿಸುವುದು
VideoFrame
ಆಬ್ಜೆಕ್ಟ್ಗಳ ಲೈವ್ ಸ್ಟ್ರೀಮ್ ಪಡೆಯಲು ಸುಲಭವಾದ ಮಾರ್ಗವೆಂದರೆ MediaStreamTrackProcessor
ಅನ್ನು ಬಳಸುವುದು, ಇದು MediaStreamTrack
ಅನ್ನು (getUserMedia
ನಿಂದ ಒಂದರಂತೆ) ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಅದರ ಫ್ರೇಮ್ಗಳನ್ನು ಓದಬಹುದಾದ ಸ್ಟ್ರೀಮ್ ಆಗಿ ಒಡ್ಡುತ್ತದೆ.
ಪರಿಕಲ್ಪನಾತ್ಮಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಸೆಟಪ್:
async function setupVideoStream() {
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const track = stream.getVideoTracks()[0];
const trackProcessor = new MediaStreamTrackProcessor({ track });
const reader = trackProcessor.readable.getReader();
let previousFrameBuffer = null;
let previousFrameTimestamp = -1;
while (true) {
const { value: frame, done } = await reader.read();
if (done) break;
// ಇಲ್ಲಿ ನಾವು ಪ್ರತಿ 'frame' ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತೇವೆ
const processedFrame = await applyTemporalFilter(frame, previousFrameBuffer);
// ಮುಂದಿನ ಪುನರಾವರ್ತನೆಗಾಗಿ, ನಾವು *ಮೂಲ* ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಬೇಕಾಗಿದೆ
// ನೀವು ಮೂಲ ಫ್ರೇಮ್ನ ಡೇಟಾವನ್ನು 'previousFrameBuffer' ಗೆ ನಕಲಿಸಬೇಕು, ಅದನ್ನು ಮುಚ್ಚುವ ಮೊದಲು.
// ಮೆಮೊರಿ ಬಿಡುಗಡೆ ಮಾಡಲು ಫ್ರೇಮ್ಗಳನ್ನು ಮುಚ್ಚಲು ಮರೆಯಬೇಡಿ!
frame.close();
// processedFrame ನೊಂದಿಗೆ ಏನಾದರೂ ಮಾಡಿ (ಉದಾ., ಕ್ಯಾನ್ವಾಸ್ಗೆ ರೆಂಡರ್ ಮಾಡಿ, ಎನ್ಕೋಡ್ ಮಾಡಿ)
// ... ಮತ್ತು ನಂತರ ಅದನ್ನೂ ಮುಚ್ಚಿ!
processedFrame.close();
}
}
ಹಂತ 2: ಫಿಲ್ಟರಿಂಗ್ ಅಲ್ಗಾರಿದಮ್ - ಪಿಕ್ಸೆಲ್ ಡೇಟಾದೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು
ಇದು ನಮ್ಮ ಕೆಲಸದ ತಿರುಳು. ನಮ್ಮ applyTemporalFilter
ಫಂಕ್ಷನ್ನೊಳಗೆ, ನಾವು ಒಳಬರುವ ಫ್ರೇಮ್ನ ಪಿಕ್ಸೆಲ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬೇಕಾಗಿದೆ. ಸರಳತೆಗಾಗಿ, ನಮ್ಮ ಫ್ರೇಮ್ಗಳು 'RGBA' ಫಾರ್ಮ್ಯಾಟ್ನಲ್ಲಿವೆ ಎಂದು ಭಾವಿಸೋಣ. ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ ಅನ್ನು 4 ಬೈಟ್ಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ: ಕೆಂಪು, ಹಸಿರು, ನೀಲಿ ಮತ್ತು ಆಲ್ಫಾ (ಪಾರದರ್ಶಕತೆ).
async function applyTemporalFilter(currentFrame, previousFrameBuffer) {
// ನಮ್ಮ ಮಿಶ್ರಣ ಅಂಶವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ. 0.8 ಎಂದರೆ 80% ಹೊಸ ಫ್ರೇಮ್ ಮತ್ತು 20% ಹಳೆಯದು.
const alpha = 0.8;
// ಆಯಾಮಗಳನ್ನು ಪಡೆಯಿರಿ
const width = currentFrame.codedWidth;
const height = currentFrame.codedHeight;
// ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನ ಪಿಕ್ಸೆಲ್ ಡೇಟಾವನ್ನು ಹಿಡಿದಿಡಲು ಒಂದು ArrayBuffer ಅನ್ನು ನಿಯೋಜಿಸಿ.
const currentFrameSize = width * height * 4; // RGBA ಗಾಗಿ ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ಗೆ 4 ಬೈಟ್ಗಳು
const currentFrameBuffer = new Uint8Array(currentFrameSize);
await currentFrame.copyTo(currentFrameBuffer);
// ಇದು ಮೊದಲ ಫ್ರೇಮ್ ಆಗಿದ್ದರೆ, ಮಿಶ್ರಣ ಮಾಡಲು ಯಾವುದೇ ಹಿಂದಿನ ಫ್ರೇಮ್ ಇಲ್ಲ.
// ಅದನ್ನು ಹಾಗೆಯೇ ಹಿಂತಿರುಗಿಸಿ, ಆದರೆ ಮುಂದಿನ ಪುನರಾವರ್ತನೆಗಾಗಿ ಅದರ ಬಫರ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಿ.
if (!previousFrameBuffer) {
const newFrameBuffer = new Uint8Array(currentFrameBuffer);
// ನಾವು ನಮ್ಮ ಜಾಗತಿಕ 'previousFrameBuffer' ಅನ್ನು ಈ ಫಂಕ್ಷನ್ನ ಹೊರಗೆ ಇದರಿಂದ ನವೀಕರಿಸುತ್ತೇವೆ.
return { buffer: newFrameBuffer, frame: currentFrame };
}
// ನಮ್ಮ ಔಟ್ಪುಟ್ ಫ್ರೇಮ್ಗಾಗಿ ಹೊಸ ಬಫರ್ ಅನ್ನು ರಚಿಸಿ.
const outputFrameBuffer = new Uint8Array(currentFrameSize);
// ಮುಖ್ಯ ಪ್ರೊಸೆಸಿಂಗ್ ಲೂಪ್.
for (let i = 0; i < currentFrameSize; i++) {
const currentPixelValue = currentFrameBuffer[i];
const previousPixelValue = previousFrameBuffer[i];
// ಪ್ರತಿ ಬಣ್ಣದ ಚಾನೆಲ್ಗೆ ಟೆಂಪೊರಲ್ ಆವರೇಜಿಂಗ್ ಸೂತ್ರವನ್ನು ಅನ್ವಯಿಸಿ.
// ನಾವು ಆಲ್ಫಾ ಚಾನೆಲ್ ಅನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತೇವೆ (ಪ್ರತಿ 4ನೇ ಬೈಟ್).
if ((i + 1) % 4 !== 0) {
outputFrameBuffer[i] = Math.round(alpha * currentPixelValue + (1 - alpha) * previousPixelValue);
} else {
// ಆಲ್ಫಾ ಚಾನೆಲ್ ಅನ್ನು ಹಾಗೆಯೇ ಇರಿಸಿ.
outputFrameBuffer[i] = currentPixelValue;
}
}
return { buffer: outputFrameBuffer, frame: currentFrame };
}
YUV ಫಾರ್ಮ್ಯಾಟ್ಗಳ ಕುರಿತು ಒಂದು ಟಿಪ್ಪಣಿ (I420, NV12): RGBA ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸುಲಭವಾಗಿದ್ದರೂ, ಹೆಚ್ಚಿನ ವೀಡಿಯೊವನ್ನು ದಕ್ಷತೆಗಾಗಿ YUV ಬಣ್ಣದ ಜಾಗಗಳಲ್ಲಿ ಸ್ಥಳೀಯವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ. YUV ಅನ್ನು ನಿರ್ವಹಿಸುವುದು ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದೆ ಏಕೆಂದರೆ ಬಣ್ಣ (U, V) ಮತ್ತು ಹೊಳಪು (Y) ಮಾಹಿತಿಯನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ('ಪ್ಲೇನ್ಗಳಲ್ಲಿ') ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಫಿಲ್ಟರಿಂಗ್ ತರ್ಕವು ಒಂದೇ ಆಗಿರುತ್ತದೆ, ಆದರೆ ನೀವು ಪ್ರತಿ ಪ್ಲೇನ್ (Y, U, ಮತ್ತು V) ಮೇಲೆ ಪ್ರತ್ಯೇಕವಾಗಿ ಪುನರಾವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ, ಅವುಗಳ ಆಯಾಮಗಳನ್ನು ಗಮನದಲ್ಲಿಟ್ಟುಕೊಂಡು (ಬಣ್ಣದ ಪ್ಲೇನ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಕಡಿಮೆ ರೆಸಲ್ಯೂಶನ್ ಹೊಂದಿರುತ್ತವೆ, ಈ ತಂತ್ರವನ್ನು ಕ್ರೋಮಾ ಸಬ್ಸ್ಯಾಂಪ್ಲಿಂಗ್ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ).
ಹಂತ 3: ಹೊಸ ಫಿಲ್ಟರ್ ಮಾಡಿದ `VideoFrame` ಅನ್ನು ರಚಿಸುವುದು
ನಮ್ಮ ಲೂಪ್ ಮುಗಿದ ನಂತರ, outputFrameBuffer
ನಮ್ಮ ಹೊಸ, ಸ್ವಚ್ಛವಾದ ಫ್ರೇಮ್ಗೆ ಪಿಕ್ಸೆಲ್ ಡೇಟಾವನ್ನು ಹೊಂದಿರುತ್ತದೆ. ನಾವು ಈಗ ಇದನ್ನು ಹೊಸ VideoFrame
ಆಬ್ಜೆಕ್ಟ್ನಲ್ಲಿ ಸುತ್ತಿಡಬೇಕು, ಮೂಲ ಫ್ರೇಮ್ನಿಂದ ಮೆಟಾಡೇಟಾವನ್ನು ನಕಲಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕು.
// applyTemporalFilter ಅನ್ನು ಕರೆದ ನಂತರ ನಿಮ್ಮ ಮುಖ್ಯ ಲೂಪ್ನೊಳಗೆ...
const { buffer: processedBuffer, frame: originalFrame } = await applyTemporalFilter(frame, previousFrameBuffer);
// ನಮ್ಮ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ಬಫರ್ನಿಂದ ಹೊಸ VideoFrame ಅನ್ನು ರಚಿಸಿ.
const newFrame = new VideoFrame(processedBuffer, {
format: 'RGBA',
codedWidth: originalFrame.codedWidth,
codedHeight: originalFrame.codedHeight,
timestamp: originalFrame.timestamp,
duration: originalFrame.duration
});
// ಪ್ರಮುಖ: ಮುಂದಿನ ಪುನರಾವರ್ತನೆಗಾಗಿ ಹಿಂದಿನ ಫ್ರೇಮ್ ಬಫರ್ ಅನ್ನು ನವೀಕರಿಸಿ.
// ನಾವು *ಮೂಲ* ಫ್ರೇಮ್ನ ಡೇಟಾವನ್ನು ನಕಲಿಸಬೇಕಾಗಿದೆ, ಫಿಲ್ಟರ್ ಮಾಡಿದ ಡೇಟಾವನ್ನಲ್ಲ.
// ಫಿಲ್ಟರಿಂಗ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತ್ಯೇಕ ನಕಲನ್ನು ಮಾಡಬೇಕು.
previousFrameBuffer = new Uint8Array(originalFrameData);
// ಈಗ ನೀವು 'newFrame' ಅನ್ನು ಬಳಸಬಹುದು. ಅದನ್ನು ರೆಂಡರ್ ಮಾಡಿ, ಎನ್ಕೋಡ್ ಮಾಡಿ, ಇತ್ಯಾದಿ.
// renderer.draw(newFrame);
// ಮತ್ತು ಮುಖ್ಯವಾಗಿ, ಮೆಮೊರಿ ಸೋರಿಕೆಯನ್ನು ತಡೆಗಟ್ಟಲು ನೀವು ಮುಗಿಸಿದಾಗ ಅದನ್ನು ಮುಚ್ಚಿ.
newFrame.close();
ಮೆಮೊರಿ ನಿರ್ವಹಣೆ ನಿರ್ಣಾಯಕವಾಗಿದೆ: VideoFrame
ಆಬ್ಜೆಕ್ಟ್ಗಳು ದೊಡ್ಡ ಪ್ರಮಾಣದ ಸಂಕುಚಿತಗೊಳಿಸದ ವೀಡಿಯೊ ಡೇಟಾವನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಹೀಪ್ನ ಹೊರಗಿನ ಮೆಮೊರಿಯಿಂದ ಬೆಂಬಲಿತವಾಗಿರಬಹುದು. ನೀವು ಮುಗಿಸಿದ ಪ್ರತಿಯೊಂದು ಫ್ರೇಮ್ನಲ್ಲಿಯೂ ನೀವು ಕಡ್ಡಾಯವಾಗಿ frame.close()
ಅನ್ನು ಕರೆಯಬೇಕು. ಹಾಗೆ ಮಾಡಲು ವಿಫಲವಾದರೆ ಶೀಘ್ರವಾಗಿ ಮೆಮೊರಿ ಖಾಲಿಯಾಗಲು ಮತ್ತು ಟ್ಯಾಬ್ ಕ್ರ್ಯಾಶ್ ಆಗಲು ಕಾರಣವಾಗುತ್ತದೆ.
ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಗಳು: ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ vs. ವೆಬ್ಅಸೆಂಬ್ಲಿ
ಮೇಲಿನ ಶುದ್ಧ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನುಷ್ಠಾನವು ಕಲಿಕೆ ಮತ್ತು ಪ್ರದರ್ಶನಕ್ಕಾಗಿ ಅತ್ಯುತ್ತಮವಾಗಿದೆ. ಆದಾಗ್ಯೂ, 30 FPS, 1080p (1920x1080) ವೀಡಿಯೊಗಾಗಿ, ನಮ್ಮ ಲೂಪ್ ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ 248 ದಶಲಕ್ಷಕ್ಕೂ ಹೆಚ್ಚು ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮಾಡಬೇಕಾಗುತ್ತದೆ! (1920 * 1080 * 4 ಬೈಟ್ಗಳು * 30 fps). ಆಧುನಿಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇಂಜಿನ್ಗಳು ನಂಬಲಾಗದಷ್ಟು ವೇಗವಾಗಿದ್ದರೂ, ಈ ಪ್ರತಿ-ಪಿಕ್ಸೆಲ್ ಪ್ರೊಸೆಸಿಂಗ್ ಹೆಚ್ಚು ಕಾರ್ಯಕ್ಷಮತೆ-ಆಧಾರಿತ ತಂತ್ರಜ್ಞಾನಕ್ಕೆ ಪರಿಪೂರ್ಣ ಬಳಕೆಯಾಗಿದೆ: ವೆಬ್ಅಸೆಂಬ್ಲಿ (Wasm).
ವೆಬ್ಅಸೆಂಬ್ಲಿ ವಿಧಾನ
ವೆಬ್ಅಸೆಂಬ್ಲಿಯು C++, Rust, ಅಥವಾ Go ನಂತಹ ಭಾಷೆಗಳಲ್ಲಿ ಬರೆದ ಕೋಡ್ ಅನ್ನು ಬ್ರೌಸರ್ನಲ್ಲಿ ಸ್ಥಳೀಯ ವೇಗಕ್ಕೆ ಹತ್ತಿರದಲ್ಲಿ ಚಲಾಯಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ನಮ್ಮ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರ್ನ ತರ್ಕವನ್ನು ಈ ಭಾಷೆಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸರಳವಾಗಿದೆ. ನೀವು ಇನ್ಪುಟ್ ಮತ್ತು ಔಟ್ಪುಟ್ ಬಫರ್ಗಳಿಗೆ ಪಾಯಿಂಟರ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಮತ್ತು ಅದೇ ಪುನರಾವರ್ತಿತ ಮಿಶ್ರಣ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುವ ಫಂಕ್ಷನ್ ಅನ್ನು ಬರೆಯುತ್ತೀರಿ.
Wasm ಗಾಗಿ ಪರಿಕಲ್ಪನಾತ್ಮಕ C++ ಫಂಕ್ಷನ್:
extern "C" {
void apply_temporal_filter(unsigned char* current_frame, unsigned char* previous_frame, unsigned char* output_frame, int buffer_size, float alpha) {
for (int i = 0; i < buffer_size; ++i) {
if ((i + 1) % 4 != 0) { // ಆಲ್ಫಾ ಚಾನೆಲ್ ಅನ್ನು ಬಿಟ್ಟುಬಿಡಿ
output_frame[i] = (unsigned char)(alpha * current_frame[i] + (1.0 - alpha) * previous_frame[i]);
} else {
output_frame[i] = current_frame[i];
}
}
}
}
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕಡೆಯಿಂದ, ನೀವು ಈ ಸಂಕಲಿಸಿದ Wasm ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಲೋಡ್ ಮಾಡುತ್ತೀರಿ. ಪ್ರಮುಖ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಯೋಜನವು ಮೆಮೊರಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದರಿಂದ ಬರುತ್ತದೆ. ನೀವು Wasm ಮಾಡ್ಯೂಲ್ನ ಲೀನಿಯರ್ ಮೆಮೊರಿಯಿಂದ ಬೆಂಬಲಿತವಾದ ArrayBuffer
ಗಳನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ರಚಿಸಬಹುದು. ಇದು ಯಾವುದೇ ದುಬಾರಿ ನಕಲು ಇಲ್ಲದೆ ಫ್ರೇಮ್ ಡೇಟಾವನ್ನು Wasm ಗೆ ರವಾನಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸಂಪೂರ್ಣ ಪಿಕ್ಸೆಲ್-ಪ್ರೊಸೆಸಿಂಗ್ ಲೂಪ್ ನಂತರ ಒಂದೇ, ಹೆಚ್ಚು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿದ Wasm ಫಂಕ್ಷನ್ ಕರೆಯಾಗಿ ಚಲಿಸುತ್ತದೆ, ಇದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ `for` ಲೂಪ್ಗಿಂತ ಗಮನಾರ್ಹವಾಗಿ ವೇಗವಾಗಿರುತ್ತದೆ.
ಸುಧಾರಿತ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ ತಂತ್ರಗಳು
ಸರಳ ಟೆಂಪೊರಲ್ ಆವರೇಜಿಂಗ್ ಉತ್ತಮ ಆರಂಭದ ಹಂತವಾಗಿದೆ, ಆದರೆ ಇದು ಒಂದು ಗಮನಾರ್ಹ ನ್ಯೂನತೆಯನ್ನು ಹೊಂದಿದೆ: ಇದು ಚಲನೆಯ ಮಸುಕು ಅಥವಾ 'ಗೋಸ್ಟಿಂಗ್' ಅನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಒಂದು ವಸ್ತುವು ಚಲಿಸಿದಾಗ, ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನಲ್ಲಿನ ಅದರ ಪಿಕ್ಸೆಲ್ಗಳು ಹಿಂದಿನ ಫ್ರೇಮ್ನ ಹಿನ್ನೆಲೆ ಪಿಕ್ಸೆಲ್ಗಳೊಂದಿಗೆ ಮಿಶ್ರಣವಾಗುತ್ತವೆ, ಇದು ಒಂದು ಟ್ರೇಲ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ನಿಜವಾಗಿಯೂ ವೃತ್ತಿಪರ-ದರ್ಜೆಯ ಫಿಲ್ಟರ್ ಅನ್ನು ನಿರ್ಮಿಸಲು, ನಾವು ಚಲನೆಯನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗಿದೆ.
ಮೋಷನ್-ಕಾಂಪೆನ್ಸೇಟೆಡ್ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ (MCTF)
ಟೆಂಪೊರಲ್ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ಗೆ ಸುವರ್ಣ ಮಾನದಂಡವೆಂದರೆ ಮೋಷನ್-ಕಾಂಪೆನ್ಸೇಟೆಡ್ ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್. ಹಿಂದಿನ ಫ್ರೇಮ್ನಲ್ಲಿ ಅದೇ (x, y) ನಿರ್ದೇಶಾಂಕದಲ್ಲಿರುವ ಪಿಕ್ಸೆಲ್ನೊಂದಿಗೆ ಕುರುಡಾಗಿ ಮಿಶ್ರಣ ಮಾಡುವ ಬದಲು, MCTF ಮೊದಲು ಆ ಪಿಕ್ಸೆಲ್ ಎಲ್ಲಿಂದ ಬಂದಿತು ಎಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ.
ಈ ಪ್ರಕ್ರಿಯೆಯು ಒಳಗೊಂಡಿದೆ:
- ಚಲನೆಯ ಅಂದಾಜು: ಅಲ್ಗಾರಿದಮ್ ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ ಅನ್ನು ಬ್ಲಾಕ್ಗಳಾಗಿ (ಉದಾ., 16x16 ಪಿಕ್ಸೆಲ್ಗಳು) ವಿಭಜಿಸುತ್ತದೆ. ಪ್ರತಿ ಬ್ಲಾಕ್ಗೆ, ಇದು ಹಿಂದಿನ ಫ್ರೇಮ್ನಲ್ಲಿ ಅತ್ಯಂತ ಹೋಲುವ (ಉದಾ., ಸಂಪೂರ್ಣ ವ್ಯತ್ಯಾಸಗಳ ಮೊತ್ತ (Sum of Absolute Differences) ಕಡಿಮೆ ಇರುವ) ಬ್ಲಾಕ್ ಅನ್ನು ಹುಡುಕುತ್ತದೆ. ಈ ಎರಡು ಬ್ಲಾಕ್ಗಳ ನಡುವಿನ ಸ್ಥಳಾಂತರವನ್ನು 'ಮೋಷನ್ ವೆಕ್ಟರ್' ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.
- ಚಲನೆಯ ಪರಿಹಾರ: ನಂತರ ಇದು ಬ್ಲಾಕ್ಗಳನ್ನು ಅವುಗಳ ಮೋಷನ್ ವೆಕ್ಟರ್ಗಳ ಪ್ರಕಾರ ಸ್ಥಳಾಂತರಿಸುವ ಮೂಲಕ ಹಿಂದಿನ ಫ್ರೇಮ್ನ 'ಮೋಷನ್-ಕಾಂಪೆನ್ಸೇಟೆಡ್' ಆವೃತ್ತಿಯನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ.
- ಫಿಲ್ಟರಿಂಗ್: ಅಂತಿಮವಾಗಿ, ಇದು ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ ಮತ್ತು ಈ ಹೊಸ, ಮೋಷನ್-ಕಾಂಪೆನ್ಸೇಟೆಡ್ ಹಿಂದಿನ ಫ್ರೇಮ್ನ ನಡುವೆ ಟೆಂಪೊರಲ್ ಆವರೇಜಿಂಗ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
ಈ ರೀತಿಯಾಗಿ, ಚಲಿಸುವ ವಸ್ತುವು ಹಿಂದಿನ ಫ್ರೇಮ್ನಿಂದ ತನ್ನೊಂದಿಗೆ ಮಿಶ್ರಣಗೊಳ್ಳುತ್ತದೆ, ಅದು ಈಗತಾನೇ ತೆರೆದಿಟ್ಟ ಹಿನ್ನೆಲೆಯೊಂದಿಗೆ ಅಲ್ಲ. ಇದು ಗೋಸ್ಟಿಂಗ್ ಕಲಾಕೃತಿಗಳನ್ನು ತೀವ್ರವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಚಲನೆಯ ಅಂದಾಜನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಗಣನಾತ್ಮಕವಾಗಿ ತೀವ್ರ ಮತ್ತು ಸಂಕೀರ್ಣವಾಗಿದೆ, ಆಗಾಗ್ಗೆ ಸುಧಾರಿತ ಅಲ್ಗಾರಿದಮ್ಗಳ ಅಗತ್ಯವಿರುತ್ತದೆ ಮತ್ತು ಇದು ಬಹುತೇಕವಾಗಿ ವೆಬ್ಅಸೆಂಬ್ಲಿ ಅಥವಾ ವೆಬ್ಜಿಪಿಯು ಕಂಪ್ಯೂಟ್ ಶೇಡರ್ಗಳಿಗೆ ಮಾತ್ರ ಸೀಮಿತವಾದ ಕಾರ್ಯವಾಗಿದೆ.
ಅಡಾಪ್ಟಿವ್ ಫಿಲ್ಟರಿಂಗ್
ಮತ್ತೊಂದು ವರ್ಧನೆಯೆಂದರೆ ಫಿಲ್ಟರ್ ಅನ್ನು ಅಡಾಪ್ಟಿವ್ ಮಾಡುವುದು. ಇಡೀ ಫ್ರೇಮ್ಗೆ ಸ್ಥಿರವಾದ alpha
ಮೌಲ್ಯವನ್ನು ಬಳಸುವ ಬದಲು, ನೀವು ಅದನ್ನು ಸ್ಥಳೀಯ ಪರಿಸ್ಥಿತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಬದಲಾಯಿಸಬಹುದು.
- ಮೋಷನ್ ಅಡಾಪ್ಟಿವಿಟಿ: ಹೆಚ್ಚು ಪತ್ತೆಯಾದ ಚಲನೆಯಿರುವ ಪ್ರದೇಶಗಳಲ್ಲಿ, ನೀವು ಯಾವುದೇ ಚಲನೆಯ ಮಸುಕನ್ನು ತಡೆಗಟ್ಟಲು ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನ ಮೇಲೆ ಬಹುತೇಕ ಸಂಪೂರ್ಣವಾಗಿ ಅವಲಂಬಿಸಲು
alpha
ಅನ್ನು ಹೆಚ್ಚಿಸಬಹುದು (ಉದಾ., 0.95 ಅಥವಾ 1.0 ಗೆ). ಸ್ಥಿರ ಪ್ರದೇಶಗಳಲ್ಲಿ (ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಗೋಡೆಯಂತೆ), ನೀವು ಹೆಚ್ಚು ಬಲವಾದ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ಗಾಗಿalpha
ಅನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು (ಉದಾ., 0.5 ಗೆ). - ಲುಮಿನೆನ್ಸ್ ಅಡಾಪ್ಟಿವಿಟಿ: ನಾಯ್ಸ್ ಸಾಮಾನ್ಯವಾಗಿ ಚಿತ್ರದ ಗಾಢವಾದ ಪ್ರದೇಶಗಳಲ್ಲಿ ಹೆಚ್ಚು ಗೋಚರಿಸುತ್ತದೆ. ವಿವರವನ್ನು ಸಂರಕ್ಷಿಸಲು ನೆರಳುಗಳಲ್ಲಿ ಫಿಲ್ಟರ್ ಅನ್ನು ಹೆಚ್ಚು ಆಕ್ರಮಣಕಾರಿಯಾಗಿ ಮತ್ತು ಪ್ರಕಾಶಮಾನವಾದ ಪ್ರದೇಶಗಳಲ್ಲಿ ಕಡಿಮೆ ಆಕ್ರಮಣಕಾರಿಯಾಗಿ ಮಾಡಬಹುದು.
ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು ಮತ್ತು ಅನ್ವಯಗಳು
ಬ್ರೌಸರ್ನಲ್ಲಿ ಉತ್ತಮ-ಗುಣಮಟ್ಟದ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ನಿರ್ವಹಿಸುವ ಸಾಮರ್ಥ್ಯವು ಹಲವಾರು ಸಾಧ್ಯತೆಗಳನ್ನು ತೆರೆಯುತ್ತದೆ:
- ನೈಜ-ಸಮಯದ ಸಂವಹನ (WebRTC): ಬಳಕೆದಾರರ ವೆಬ್ಕ್ಯಾಮ್ ಫೀಡ್ ಅನ್ನು ವೀಡಿಯೊ ಎನ್ಕೋಡರ್ಗೆ ಕಳುಹಿಸುವ ಮೊದಲು ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದು. ಇದು ಕಡಿಮೆ-ಬೆಳಕಿನ ಪರಿಸರದಲ್ಲಿ ವೀಡಿಯೊ ಕರೆಗಳಿಗೆ ಒಂದು ದೊಡ್ಡ ಗೆಲುವು, ದೃಶ್ಯ ಗುಣಮಟ್ಟವನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಮತ್ತು ಅಗತ್ಯವಿರುವ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ವೆಬ್-ಆಧಾರಿತ ವೀಡಿಯೊ ಎಡಿಟಿಂಗ್: ಬ್ರೌಸರ್-ಒಳಗಿನ ವೀಡಿಯೊ ಸಂಪಾದಕದಲ್ಲಿ 'ಡಿನಾಯ್ಸ್' ಫಿಲ್ಟರ್ ಅನ್ನು ಒಂದು ವೈಶಿಷ್ಟ್ಯವಾಗಿ ನೀಡುವುದು, ಬಳಕೆದಾರರಿಗೆ ತಮ್ಮ ಅಪ್ಲೋಡ್ ಮಾಡಿದ ಫೂಟೇಜ್ ಅನ್ನು ಸರ್ವರ್-ಸೈಡ್ ಪ್ರೊಸೆಸಿಂಗ್ ಇಲ್ಲದೆ ಸ್ವಚ್ಛಗೊಳಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
- ಕ್ಲೌಡ್ ಗೇಮಿಂಗ್ ಮತ್ತು ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್: ಒಳಬರುವ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಕಂಪ್ರೆಷನ್ ಕಲಾಕೃತಿಗಳನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ಮತ್ತು ಸ್ಪಷ್ಟವಾದ, ಹೆಚ್ಚು ಸ್ಥಿರವಾದ ಚಿತ್ರವನ್ನು ಒದಗಿಸುವುದು.
- ಕಂಪ್ಯೂಟರ್ ವಿಷನ್ ಪೂರ್ವ-ಪ್ರೊಸೆಸಿಂಗ್: ವೆಬ್-ಆಧಾರಿತ AI/ML ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ (ವಸ್ತು ಟ್ರ್ಯಾಕಿಂಗ್ ಅಥವಾ ಮುಖ ಗುರುತಿಸುವಿಕೆಯಂತಹ), ಇನ್ಪುಟ್ ವೀಡಿಯೊವನ್ನು ಡಿನಾಯ್ಸ್ ಮಾಡುವುದರಿಂದ ಡೇಟಾವನ್ನು ಸ್ಥಿರಗೊಳಿಸಬಹುದು ಮತ್ತು ಹೆಚ್ಚು ನಿಖರ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹ ಫಲಿತಾಂಶಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು.
ಸವಾಲುಗಳು ಮತ್ತು ಭವಿಷ್ಯದ ನಿರ್ದೇಶನಗಳು
ಶಕ್ತಿಯುತವಾಗಿದ್ದರೂ, ಈ ವಿಧಾನವು ಅದರ ಸವಾಲುಗಳಿಲ್ಲದೆ ಇಲ್ಲ. ಡೆವಲಪರ್ಗಳು ಈ ಕೆಳಗಿನವುಗಳ ಬಗ್ಗೆ ಗಮನಹರಿಸಬೇಕು:
- ಕಾರ್ಯಕ್ಷಮತೆ: HD ಅಥವಾ 4K ವೀಡಿಯೊಗಾಗಿ ನೈಜ-ಸಮಯದ ಪ್ರೊಸೆಸಿಂಗ್ ಬೇಡಿಕೆಯುಳ್ಳದ್ದಾಗಿದೆ. ದಕ್ಷ ಅನುಷ್ಠಾನ, ಸಾಮಾನ್ಯವಾಗಿ ವೆಬ್ಅಸೆಂಬ್ಲಿಯೊಂದಿಗೆ, ಅತ್ಯಗತ್ಯ.
- ಮೆಮೊರಿ: ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಹಿಂದಿನ ಫ್ರೇಮ್ಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸದ ಬಫರ್ಗಳಾಗಿ ಸಂಗ್ರಹಿಸುವುದು ಗಮನಾರ್ಹ ಪ್ರಮಾಣದ RAM ಅನ್ನು ಬಳಸುತ್ತದೆ. ಎಚ್ಚರಿಕೆಯ ನಿರ್ವಹಣೆ ಅತ್ಯಗತ್ಯ.
- ಲೇಟೆನ್ಸಿ (ವಿಳಂಬ): ಪ್ರತಿಯೊಂದು ಪ್ರೊಸೆಸಿಂಗ್ ಹಂತವು ಲೇಟೆನ್ಸಿಯನ್ನು ಸೇರಿಸುತ್ತದೆ. ನೈಜ-ಸಮಯದ ಸಂವಹನಕ್ಕಾಗಿ, ಗಮನಾರ್ಹ ವಿಳಂಬಗಳನ್ನು ತಪ್ಪಿಸಲು ಈ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಹೆಚ್ಚು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಬೇಕು.
- ವೆಬ್ಜಿಪಿಯು ಜೊತೆಗಿನ ಭವಿಷ್ಯ: ಉದಯೋನ್ಮುಖ ವೆಬ್ಜಿಪಿಯು API ಈ ರೀತಿಯ ಕೆಲಸಕ್ಕೆ ಹೊಸ ಗಡಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಈ ಪ್ರತಿ-ಪಿಕ್ಸೆಲ್ ಅಲ್ಗಾರಿದಮ್ಗಳನ್ನು ಸಿಸ್ಟಮ್ನ GPU ನಲ್ಲಿ ಹೆಚ್ಚು ಸಮಾನಾಂತರವಾದ ಕಂಪ್ಯೂಟ್ ಶೇಡರ್ಗಳಾಗಿ ಚಲಾಯಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ಸಿಪಿಯುನಲ್ಲಿ ವೆಬ್ಅಸೆಂಬ್ಲಿಗಿಂತಲೂ ಮತ್ತೊಂದು ಬೃಹತ್ ಕಾರ್ಯಕ್ಷಮತೆಯ ಜಿಗಿತವನ್ನು ನೀಡುತ್ತದೆ.
ತೀರ್ಮಾನ
ವೆಬ್ಕೋಡೆಕ್ಸ್ API ವೆಬ್ನಲ್ಲಿ ಸುಧಾರಿತ ಮೀಡಿಯಾ ಪ್ರೊಸೆಸಿಂಗ್ಗೆ ಹೊಸ ಯುಗವನ್ನು ಗುರುತಿಸುತ್ತದೆ. ಇದು ಸಾಂಪ್ರದಾಯಿಕ ಬ್ಲ್ಯಾಕ್-ಬಾಕ್ಸ್ <video>
ಎಲಿಮೆಂಟ್ನ ಅಡೆತಡೆಗಳನ್ನು ಕೆಡವುತ್ತದೆ ಮತ್ತು ಡೆವಲಪರ್ಗಳಿಗೆ ನಿಜವಾಗಿಯೂ ವೃತ್ತಿಪರ ವೀಡಿಯೊ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಅಗತ್ಯವಾದ ಸೂಕ್ಷ್ಮ-ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ. ಟೆಂಪೊರಲ್ ನಾಯ್ಸ್ ರಿಡಕ್ಷನ್ ಅದರ ಶಕ್ತಿಯ ಪರಿಪೂರ್ಣ ಉದಾಹರಣೆಯಾಗಿದೆ: ಇದು ಬಳಕೆದಾರರು-ಗ್ರಹಿಸಿದ ಗುಣಮಟ್ಟ ಮತ್ತು ಆಧಾರವಾಗಿರುವ ತಾಂತ್ರಿಕ ದಕ್ಷತೆ ಎರಡನ್ನೂ ನೇರವಾಗಿ ಪರಿಹರಿಸುವ ಒಂದು ಅತ್ಯಾಧುನಿಕ ತಂತ್ರವಾಗಿದೆ.
ಪ್ರತ್ಯೇಕ VideoFrame
ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ತಡೆಯುವ ಮೂಲಕ, ನಾವು ನಾಯ್ಸ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು, ಸಂಕುಚಿತತೆಯನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ಉತ್ತಮ ವೀಡಿಯೊ ಅನುಭವವನ್ನು ನೀಡಲು ಶಕ್ತಿಯುತ ಫಿಲ್ಟರಿಂಗ್ ತರ್ಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಎಂದು ನಾವು ನೋಡಿದ್ದೇವೆ. ಸರಳ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನುಷ್ಠಾನವು ಉತ್ತಮ ಆರಂಭದ ಹಂತವಾಗಿದ್ದರೂ, ಉತ್ಪಾದನೆಗೆ-ಸಿದ್ಧವಾದ, ನೈಜ-ಸಮಯದ ಪರಿಹಾರದ ಹಾದಿಯು ವೆಬ್ಅಸೆಂಬ್ಲಿಯ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ, ವೆಬ್ಜಿಪಿಯುನ ಸಮಾನಾಂತರ ಸಂಸ್ಕರಣಾ ಶಕ್ತಿಯ ಮೂಲಕ ಸಾಗುತ್ತದೆ.
ಮುಂದಿನ ಬಾರಿ ನೀವು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ಧಾನ್ಯದಂತಹ ವೀಡಿಯೊವನ್ನು ನೋಡಿದಾಗ, ಅದನ್ನು ಸರಿಪಡಿಸುವ ಸಾಧನಗಳು ಈಗ, ಮೊದಲ ಬಾರಿಗೆ, ವೆಬ್ ಡೆವಲಪರ್ಗಳ ಕೈಯಲ್ಲಿ ನೇರವಾಗಿವೆ ಎಂದು ನೆನಪಿಡಿ. ವೆಬ್ನಲ್ಲಿ ವೀಡಿಯೊದೊಂದಿಗೆ ನಿರ್ಮಿಸಲು ಇದು ಒಂದು ಅತ್ಯಾಕರ್ಷಕ ಸಮಯವಾಗಿದೆ.