ಏಕತೆಯಲ್ಲಿ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ಮನಬಂದಂತೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ
ನಿಮ್ಮ ಯೂನಿಟಿ ಯೋಜನೆಯಲ್ಲಿ ನೈಜ-ಸಮಯದ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಸಂಯೋಜಿಸಲು ನೀವು ಎಂದಾದರೂ ಬಯಸಿದ್ದೀರಾ? ನೀವು ESP32 ಕ್ಯಾಮೆರಾದೊಂದಿಗೆ ಪ್ರಯೋಗ ಮಾಡುತ್ತಿದ್ದರೆ, ವೀಡಿಯೊ ಫೀಡ್ ನಿರೀಕ್ಷಿಸಿದಂತೆ ರೆಂಡರ್ ಆಗದಿದ್ದಾಗ ನೀವೇ ಗೊಂದಲಕ್ಕೊಳಗಾಗಬಹುದು. ಯೂನಿಟಿಯ ನಮ್ಯತೆಯು ಅಂತಹ ಕಾರ್ಯಗಳಿಗೆ ಒಂದು ಪ್ರಮುಖ ಆಯ್ಕೆಯಾಗಿದೆ, ಆದರೆ ಯೂನಿಟಿ ಮತ್ತು MJPEG ಸ್ಟ್ರೀಮಿಂಗ್ ನಡುವಿನ ಅಂತರವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸ್ವಲ್ಪ ಪ್ರಯತ್ನವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. 🖥️
ESP32 ಕ್ಯಾಮರಾದಿಂದ ಲೈವ್ ಫೀಡ್ ಅನ್ನು RawImage ಕಾಂಪೊನೆಂಟ್ಗೆ ಲಿಂಕ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಅನೇಕ ಡೆವಲಪರ್ಗಳು, ವಿಶೇಷವಾಗಿ ಯೂನಿಟಿಗೆ ಹೆಜ್ಜೆ ಹಾಕುವವರು ಸವಾಲುಗಳನ್ನು ಎದುರಿಸುತ್ತಾರೆ. ಖಾಲಿ ಹಿನ್ನೆಲೆಗಳು, ಕನ್ಸೋಲ್ ದೋಷಗಳ ಕೊರತೆ ಅಥವಾ MJPEG ಸ್ಟ್ರೀಮ್ಗಳ ಅಸಮರ್ಪಕ ರೆಂಡರಿಂಗ್ನಂತಹ ಸಮಸ್ಯೆಗಳು ಸಾಕಷ್ಟು ನಿರಾಶಾದಾಯಕವಾಗಿರುತ್ತದೆ. ಆದರೂ, ಈ ಅಡೆತಡೆಗಳನ್ನು ಸ್ವಲ್ಪ ಮಾರ್ಗದರ್ಶನ ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟಿಂಗ್ ಕೈಚಳಕದಿಂದ ಸಂಪೂರ್ಣವಾಗಿ ಮೀರಿಸಬಹುದು. 🚀
ಉದಾಹರಣೆಗೆ, ನೀವು `http://192.1.1.1:81/stream` ನಲ್ಲಿ ESP32 ಕ್ಯಾಮರಾ ಸ್ಟ್ರೀಮಿಂಗ್ ವೀಡಿಯೊವನ್ನು ಹೊಂದಿಸಿರುವಿರಿ ಎಂದು ಊಹಿಸಿ. ನಿಮ್ಮ ಯೂನಿಟಿ ಕ್ಯಾನ್ವಾಸ್ಗೆ ನೀವು RawImage ಅನ್ನು ಸೇರಿಸಿ, ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಅನ್ವಯಿಸಿ ಮತ್ತು ಸ್ಟ್ರೀಮ್ ಅನ್ನು ತೋರಿಸಲು ನಿರೀಕ್ಷಿಸಿ, ಆದರೆ ನೀವು ಪಡೆಯುವುದು ಖಾಲಿ ಪರದೆಯನ್ನು ಮಾತ್ರ. ಅಂತಹ ಸನ್ನಿವೇಶವನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಸ್ಕ್ರಿಪ್ಟ್, ಸ್ಟ್ರೀಮಿಂಗ್ ಪ್ರೋಟೋಕಾಲ್ಗಳು ಮತ್ತು ಯೂನಿಟಿ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿನ ವಿವರಗಳಿಗೆ ಗಮನ ನೀಡುವ ಅಗತ್ಯವಿದೆ.
ಯುನಿಟಿಯಲ್ಲಿ MJPEG ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ನಿರೂಪಿಸಲು ಪರಿಹಾರವನ್ನು ನಿವಾರಿಸಲು ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಈ ಮಾರ್ಗದರ್ಶಿ ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ವೀಡಿಯೊ ಫ್ರೇಮ್ಗಳನ್ನು ಸೆರೆಹಿಡಿಯುವ, ಅವುಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಮತ್ತು ಯೂನಿಟಿ ಕ್ಯಾನ್ವಾಸ್ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸುವ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಹೇಗೆ ಬರೆಯುವುದು ಎಂದು ನೀವು ಕಲಿಯುವಿರಿ. ಅಂತ್ಯದ ವೇಳೆಗೆ, ನಿಮ್ಮ ESP32 ಕ್ಯಾಮರಾ ಫೀಡ್ ಯುನಿಟಿಯಲ್ಲಿ ಜೀವ ತುಂಬುತ್ತದೆ, ನಿಮ್ಮ ಯೋಜನೆಯನ್ನು ಸಂವಾದಾತ್ಮಕ ಮತ್ತು ದೃಷ್ಟಿ ಕ್ರಿಯಾತ್ಮಕಗೊಳಿಸುತ್ತದೆ. ಧುಮುಕೋಣ! 💡
ಆಜ್ಞೆ | ಬಳಕೆ ಮತ್ತು ವಿವರಣೆಯ ಉದಾಹರಣೆ |
---|---|
HttpWebRequest | HTTP ವಿನಂತಿಗಳನ್ನು ರಚಿಸಲು ಮತ್ತು ಕಳುಹಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಇದು MJPEG ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಪಡೆಯಲು ESP32 ಕ್ಯಾಮರಾ ಸ್ಟ್ರೀಮ್ URL ಗೆ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸುತ್ತದೆ. |
GetResponse() | ಸರ್ವರ್ನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಹಿಂಪಡೆಯಲು HttpWebRequest ವಸ್ತುವಿನ ಮೇಲೆ ಕರೆ ಮಾಡಲಾಗಿದೆ. ESP32 ಕ್ಯಾಮರಾದಿಂದ ಒದಗಿಸಲಾದ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಈ ವಿಧಾನವು ನಿರ್ಣಾಯಕವಾಗಿದೆ. |
Stream.Read() | ಡೇಟಾ ಸ್ಟ್ರೀಮ್ನಿಂದ ಬೈಟ್ಗಳ ಅನುಕ್ರಮವನ್ನು ಓದುತ್ತದೆ. ESP32 ನ MJPEG ಸ್ಟ್ರೀಮ್ನಿಂದ ಭಾಗಗಳಲ್ಲಿ ವೀಡಿಯೊ ಫ್ರೇಮ್ಗಳನ್ನು ತರಲು ಇದನ್ನು ಇಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ. |
Texture2D.LoadImage() | ಚಿತ್ರದ ಬೈಟ್ ಶ್ರೇಣಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಏಕತೆಯ ವಿನ್ಯಾಸವನ್ನು ನವೀಕರಿಸುತ್ತದೆ. ಈ ಆಜ್ಞೆಯು MJPEG ಫ್ರೇಮ್ಗಳನ್ನು ಯೂನಿಟಿ ರೆಂಡರ್ ಮಾಡಬಹುದಾದ ಟೆಕ್ಸ್ಚರ್ ಫಾರ್ಮ್ಯಾಟ್ಗೆ ಡಿಕೋಡ್ ಮಾಡುತ್ತದೆ. |
UnityWebRequestTexture.GetTexture() | URL ನಿಂದ ವಿನ್ಯಾಸವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು UnityWebRequest ಅನ್ನು ರಚಿಸುತ್ತದೆ. ಯೂನಿಟಿಯಲ್ಲಿ HTTP ವಿನಂತಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಇದು ಉನ್ನತ ಮಟ್ಟದ ಪರ್ಯಾಯವಾಗಿದೆ. |
DownloadHandlerTexture | HTTP ಪ್ರತಿಕ್ರಿಯೆಯಿಂದ ಟೆಕ್ಸ್ಚರ್ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯುವ ಯೂನಿಟಿ ವರ್ಗ. ಯೂನಿಟಿಯ ರೆಂಡರಿಂಗ್ ಪೈಪ್ಲೈನ್ಗೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಬಳಸಬಹುದಾದ ವಿನ್ಯಾಸವಾಗಿ ಪರಿವರ್ತಿಸುವುದನ್ನು ಇದು ಸರಳಗೊಳಿಸುತ್ತದೆ. |
IEnumerator | ಯೂನಿಟಿಯಲ್ಲಿ ಕೊರೂಟಿನ್ ವಿಧಾನಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಇದು ಮುಖ್ಯ ಥ್ರೆಡ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸದೆ MJPEG ಫ್ರೇಮ್ಗಳನ್ನು ನಿರಂತರವಾಗಿ ಓದುವಂತಹ ಅಸಮಕಾಲಿಕ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. |
MemoryStream | ಮೆಮೊರಿಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ರಚಿಸಲು .NET ವರ್ಗ. ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ಪ್ರತಿ ವೀಡಿಯೊ ಫ್ರೇಮ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ಇದು ತಾತ್ಕಾಲಿಕವಾಗಿ MJPEG ಫ್ರೇಮ್ ಡೇಟಾವನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತದೆ. |
RawImage | UI ಕ್ಯಾನ್ವಾಸ್ನಲ್ಲಿ ಟೆಕ್ಸ್ಚರ್ಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಬಳಸಲಾಗುವ ಯೂನಿಟಿ ಘಟಕ. ಆಟದ ದೃಶ್ಯದಲ್ಲಿ MJPEG ವೀಡಿಯೊ ಫೀಡ್ ಅನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲು ಇದು ದೃಶ್ಯ ಗುರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. |
yield return null | ಮುಂದಿನ ಫ್ರೇಮ್ ತನಕ ಕೊರೂಟಿನ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸುತ್ತದೆ. ವೀಡಿಯೊ ಫ್ರೇಮ್ಗಳನ್ನು ಅಸಮಕಾಲಿಕವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ಇದು ಸುಗಮವಾದ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಖಾತ್ರಿಗೊಳಿಸುತ್ತದೆ. |
ಏಕತೆಯಲ್ಲಿ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮಿಂಗ್ ಇಂಟಿಗ್ರೇಶನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ಮೊದಲ ಸ್ಕ್ರಿಪ್ಟ್ ಯೂನಿಟಿಯನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ ಕಚ್ಚಾ ಚಿತ್ರ ESP32 ಕ್ಯಾಮರಾದಿಂದ ಸ್ಟ್ರೀಮ್ ಮಾಡಲಾದ ವೀಡಿಯೊ ಫ್ರೇಮ್ಗಳನ್ನು ನಿರೂಪಿಸಲು ಘಟಕ. ESP32 ನ ಸ್ಟ್ರೀಮಿಂಗ್ URL ನೊಂದಿಗೆ HTTP ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸುವ ಮೂಲಕ, ಸ್ಕ್ರಿಪ್ಟ್ MJPEG ಡೇಟಾವನ್ನು ಪಡೆಯುತ್ತದೆ, ಪ್ರತಿ ಫ್ರೇಮ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕ್ಯಾನ್ವಾಸ್ನಲ್ಲಿ ವಿನ್ಯಾಸವಾಗಿ ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಇದನ್ನು ಸಾಧಿಸುವ ಕೀಲಿಯು ಇದರಲ್ಲಿದೆ Texture2D.LoadImage() ವಿಧಾನ, ಇದು MJPEG ಸ್ಟ್ರೀಮ್ನಿಂದ ಕಚ್ಚಾ ಬೈಟ್ಗಳನ್ನು ಯೂನಿಟಿ ಪ್ರದರ್ಶಿಸಬಹುದಾದ ಸ್ವರೂಪಕ್ಕೆ ಡಿಕೋಡ್ ಮಾಡುತ್ತದೆ. ಯೂನಿಟಿಯಲ್ಲಿ IoT ಇಂಟಿಗ್ರೇಷನ್ಗಳನ್ನು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವ ಅನನುಭವಿ ಡೆವಲಪರ್ಗಳಿಗೆ ಸಹ ನೈಜ-ಸಮಯದ ವೀಡಿಯೊವನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ ಎಂದು ಈ ವಿಧಾನವು ಖಚಿತಪಡಿಸುತ್ತದೆ. 🖼️
ಕೊರೊಟೀನ್ಗಳ ಬಳಕೆ, ಉದಾಹರಣೆಗೆ IEnumerator StartStream(), ಈ ಅನುಷ್ಠಾನಕ್ಕೆ ಅತ್ಯಗತ್ಯ. ಯೂನಿಟಿ ಮುಖ್ಯ ಥ್ರೆಡ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸದೆಯೇ ಕೊರೊಟೈನ್ಗಳು ಅಸಮಕಾಲಿಕ ಡೇಟಾವನ್ನು ಪಡೆಯಲು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ವೀಡಿಯೊ ಫೀಡ್ನ ತಡೆರಹಿತ ಫ್ರೇಮ್-ಬೈ-ಫ್ರೇಮ್ ನವೀಕರಣವನ್ನು ಖಾತ್ರಿಗೊಳಿಸುತ್ತದೆ, ಆಟ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಕೊರೂಟಿನ್ MJPEG ಫ್ರೇಮ್ಗಳನ್ನು ಓದುವಾಗ, ಇತರ ಆಟದ ಘಟಕಗಳು ಸರಾಗವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತವೆ. ನೈಜ-ಸಮಯದ ವೀಡಿಯೊ ನಿರ್ಣಾಯಕವಾಗಿರುವ ಭದ್ರತಾ ಮೇಲ್ವಿಚಾರಣೆ ಅಥವಾ ಸಂವಾದಾತ್ಮಕ ಕಿಯೋಸ್ಕ್ಗಳಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ.
ಎರಡನೆಯ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬಳಸುವ ಮೂಲಕ ಮೊದಲನೆಯದನ್ನು ಸುಧಾರಿಸುತ್ತದೆ UnityWebRequest, ವೆಬ್ ವಿನಂತಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಆಧುನಿಕ ಮತ್ತು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿದ ವಿಧಾನ. ಭಿನ್ನವಾಗಿ HttpWebRequest, ಇದು ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ಹೆಚ್ಚು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುವ ಅಗತ್ಯವಿದೆ, UnityWebRequestTexture.GetTexture() ನೇರವಾಗಿ ESP32 ನ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ URL ನಿಂದ ಟೆಕ್ಸ್ಚರ್ಗಳನ್ನು ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ. ಇದು ಅಭಿವೃದ್ಧಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸುಗಮಗೊಳಿಸುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಬಳಕೆಯ ಸುಲಭತೆಗೆ ಆದ್ಯತೆ ನೀಡುವ ಯೂನಿಟಿ ಡೆವಲಪರ್ಗಳಿಗೆ. ನೈಜ-ಸಮಯದ ನ್ಯಾವಿಗೇಷನ್ಗಾಗಿ ಯೂನಿಟಿ-ಆಧಾರಿತ ವಿಆರ್ ಸಿಮ್ಯುಲೇಶನ್ಗೆ ಡ್ರೋನ್ನ ಕ್ಯಾಮೆರಾ ಫೀಡ್ ಅನ್ನು ಸಂಯೋಜಿಸುವ ಡೆವಲಪರ್ ಒಂದು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಯಾಗಿದೆ. 🚁
ಎರಡೂ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಮಾಡ್ಯುಲರ್ ಮತ್ತು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕೋಡ್ನ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಎತ್ತಿ ತೋರಿಸುತ್ತವೆ. ಯೂನಿಟಿ ಇನ್ಸ್ಪೆಕ್ಟರ್ ಮೂಲಕ URL ಮತ್ತು RawImage ನಂತಹ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಗ್ರಾಹಕೀಯಗೊಳಿಸುವುದರೊಂದಿಗೆ, ಯೂನಿಟಿ ವಸ್ತುವಿಗೆ ಸುಲಭವಾಗಿ ಲಗತ್ತಿಸುವಂತೆ ತರಗತಿಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಈ ಮಾಡ್ಯುಲಾರಿಟಿಯು ಡೆವಲಪರ್ಗಳು ರೊಬೊಟಿಕ್ಸ್, IoT ಸಾಧನಗಳು ಅಥವಾ ಕಸ್ಟಮ್ ಮೀಡಿಯಾ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ವಿಭಿನ್ನ ಬಳಕೆಯ ಸಂದರ್ಭಗಳಿಗೆ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ತ್ವರಿತವಾಗಿ ಅಳವಡಿಸಿಕೊಳ್ಳಬಹುದು ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಈ ಉದಾಹರಣೆಗಳು ಯುನಿಟಿಯಲ್ಲಿ ನೈಜ-ಸಮಯದ ವೀಡಿಯೊವನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲು ದೃಢವಾದ ಅಡಿಪಾಯವನ್ನು ಒದಗಿಸುತ್ತವೆ, ಕ್ರಿಯಾತ್ಮಕ ದೃಶ್ಯ ಇನ್ಪುಟ್ ಅಗತ್ಯವಿರುವ ಯೋಜನೆಗಳಲ್ಲಿ ಸೃಜನಶೀಲತೆಯನ್ನು ಪ್ರವರ್ಧಮಾನಕ್ಕೆ ತರಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. 🌟
ESP32 ಕ್ಯಾಮೆರಾ ಇಂಟಿಗ್ರೇಷನ್ನೊಂದಿಗೆ ಏಕತೆಯಲ್ಲಿ MJPEG ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲಾಗುತ್ತಿದೆ
ವಿಧಾನ 1: ಯೂನಿಟಿಯ RawImage ಮತ್ತು HTTP ವಿನಂತಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು MJPEG ಸ್ಟ್ರೀಮಿಂಗ್
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Net;
using System.Collections;
public class ESP32Stream : MonoBehaviour
{
public string url = "http://192.1.1.1:81/stream";
public RawImage rawImage;
private Texture2D texture;
void Start()
{
if (rawImage == null)
{
Debug.LogError("RawImage is not assigned.");
return;
}
texture = new Texture2D(2, 2);
rawImage.texture = texture;
StartCoroutine(StreamVideo());
}
IEnumerator StreamVideo()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
while (true)
{
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
texture.LoadImage(ms.ToArray());
rawImage.texture = texture;
yield return null;
}
}
}
}
ದಕ್ಷ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮಿಂಗ್ಗಾಗಿ UnityWebRequest ಅನ್ನು ಬಳಸುವುದು
ವಿಧಾನ 2: ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ ಯೂನಿಟಿವೆಬ್ ವಿನಂತಿಯನ್ನು ನಿಯಂತ್ರಿಸುವುದು
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;
public class UnityWebRequestStream : MonoBehaviour
{
public string streamURL = "http://192.1.1.1:81/stream";
public RawImage videoDisplay;
private Texture2D videoTexture;
void Start()
{
videoTexture = new Texture2D(2, 2);
videoDisplay.texture = videoTexture;
StartCoroutine(StreamVideo());
}
IEnumerator StreamVideo()
{
while (true)
{
UnityWebRequest request = UnityWebRequestTexture.GetTexture(streamURL);
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Stream failed: " + request.error);
}
else
{
videoTexture = ((DownloadHandlerTexture)request.downloadHandler).texture;
videoDisplay.texture = videoTexture;
}
yield return new WaitForSeconds(0.1f);
}
}
}
ನೈಜ-ಸಮಯದ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳೊಂದಿಗೆ ಏಕತೆಯ ಯೋಜನೆಗಳನ್ನು ಹೆಚ್ಚಿಸುವುದು
ಯುನಿಟಿಯಲ್ಲಿ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ಸಂಯೋಜಿಸುವಾಗ ಸಾಮಾನ್ಯವಾಗಿ ಕಡೆಗಣಿಸಲ್ಪಡುವ ಒಂದು ಅಂಶವೆಂದರೆ ದೀರ್ಘಾವಧಿಯ ಅವಧಿಗಳಿಗಾಗಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ನಿರ್ವಹಿಸುವುದು. MJPEG ಸ್ಟ್ರೀಮ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಫ್ರೇಮ್ಗಳನ್ನು ನಿರಂತರ ಅನುಕ್ರಮವಾಗಿ ವಿತರಿಸಲಾಗುತ್ತದೆ, ಪ್ರತಿಯೊಂದನ್ನು ಡಿಕೋಡ್ ಮಾಡಲು ಮತ್ತು ರೆಂಡರ್ ಮಾಡಲು ಯೂನಿಟಿ ಅಗತ್ಯವಿರುತ್ತದೆ. ಸರಿಯಾದ ಆಪ್ಟಿಮೈಸೇಶನ್ ಇಲ್ಲದೆ, ಇದು ಮೆಮೊರಿ ಸೋರಿಕೆಗೆ ಕಾರಣವಾಗಬಹುದು ಅಥವಾ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ವಿಳಂಬವಾಗಬಹುದು. ಮುಂತಾದ ಉಪಕರಣಗಳನ್ನು ಬಳಸುವುದು ಪ್ರೊಫೈಲರ್ ಯೂನಿಟಿಯಲ್ಲಿ ಡೆವಲಪರ್ಗಳಿಗೆ ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಮತ್ತು ವೀಡಿಯೊ ರೆಂಡರಿಂಗ್ ಪೈಪ್ಲೈನ್ನಲ್ಲಿ ಸಂಭಾವ್ಯ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ವಿಶೇಷವಾಗಿ ಡ್ರೋನ್ ಮಾನಿಟರಿಂಗ್ ಅಥವಾ ರೊಬೊಟಿಕ್ ಇಂಟರ್ಫೇಸ್ಗಳಂತಹ ಸಂವಾದಾತ್ಮಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಉತ್ತಮವಾಗಿ-ಟ್ಯೂನ್ ಮಾಡಿದ ಆಟವು ಸುಗಮ ದೃಶ್ಯಗಳನ್ನು ಖಾತ್ರಿಗೊಳಿಸುತ್ತದೆ. 🚁
ಮತ್ತೊಂದು ಪ್ರಮುಖ ವಿಷಯವೆಂದರೆ ಭದ್ರತೆ, ವಿಶೇಷವಾಗಿ ESP32 ನಂತಹ IoT ಸಾಧನಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ. ಸ್ಟ್ರೀಮಿಂಗ್ URL, ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಾಗಿ ಹಾರ್ಡ್ಕೋಡ್ ಮಾಡಲಾಗಿದ್ದು, ಅನಧಿಕೃತ ಪ್ರವೇಶಕ್ಕೆ ಕ್ಯಾಮರಾವನ್ನು ಒಡ್ಡುತ್ತದೆ. ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಟೋಕನ್ಗಳೊಂದಿಗೆ ಸುರಕ್ಷಿತ URL ಗಳನ್ನು ಬಳಸುವುದು ಮತ್ತು ನಿರ್ದಿಷ್ಟ IP ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಮಿತಿಗೊಳಿಸುವುದು ಉತ್ತಮ ವಿಧಾನವಾಗಿದೆ. ಡೆವಲಪರ್ಗಳು ಸ್ಟ್ರೀಮಿಂಗ್ ವಿಳಾಸವನ್ನು ಯೂನಿಟಿ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಬಹಿರಂಗಪಡಿಸುವ ಬದಲು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಬಹುದು. ಇದನ್ನು ಮಾಡುವುದರಿಂದ, ನಿಮ್ಮ ಏಕತೆ-ಆಧಾರಿತ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸುರಕ್ಷಿತವಾಗಿರುತ್ತವೆ ಮತ್ತು ಸಂಭಾವ್ಯ ಬೆದರಿಕೆಗಳ ವಿರುದ್ಧ ಹೆಚ್ಚು ಸ್ಥಿತಿಸ್ಥಾಪಕವಾಗುತ್ತವೆ. 🔒
ಅಂತಿಮವಾಗಿ, ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ವಿರಾಮಗೊಳಿಸಲು ಅಥವಾ ನಿಲ್ಲಿಸಲು ಕಾರ್ಯವನ್ನು ಸೇರಿಸುವುದನ್ನು ಪರಿಗಣಿಸಿ. ಅನೇಕ ಯೋಜನೆಗಳು ವೀಡಿಯೊವನ್ನು ಸರಳವಾಗಿ ರೆಂಡರಿಂಗ್ ಮಾಡುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತವೆ, ನೈಜ-ಪ್ರಪಂಚದ ಸನ್ನಿವೇಶಗಳು ಹೆಚ್ಚಾಗಿ ಹೆಚ್ಚು ಪರಸ್ಪರ ಕ್ರಿಯೆಯ ಅಗತ್ಯವಿರುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಭದ್ರತಾ ಮೇಲ್ವಿಚಾರಣಾ ವ್ಯವಸ್ಥೆಯು ನಿರ್ವಹಣೆಗಾಗಿ ಫೀಡ್ ಅನ್ನು ನಿಲ್ಲಿಸಬೇಕಾಗಬಹುದು ಅಥವಾ ಬಹು ಕ್ಯಾಮೆರಾಗಳ ನಡುವೆ ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ. UI ಬಟನ್ಗಳೊಂದಿಗೆ "Pause Stream" ಅಥವಾ "Switch Camera" ನಂತಹ ಆಜ್ಞೆಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದರಿಂದ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ವಿವಿಧ ಬಳಕೆಯ ಸಂದರ್ಭಗಳಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವಂತೆ ಮಾಡುವ ಮೂಲಕ ಉಪಯುಕ್ತತೆಯನ್ನು ಹೆಚ್ಚು ಹೆಚ್ಚಿಸಬಹುದು. 🌟
ಏಕತೆಯಲ್ಲಿ ESP32 ವೀಡಿಯೊವನ್ನು ಸ್ಟ್ರೀಮಿಂಗ್ ಮಾಡುವ ಕುರಿತು ಸಾಮಾನ್ಯ ಪ್ರಶ್ನೆಗಳು
- ವೀಡಿಯೊವನ್ನು ಪ್ರದರ್ಶಿಸದಿದ್ದಲ್ಲಿ ನಾನು ಹೇಗೆ ದೋಷನಿವಾರಣೆ ಮಾಡುವುದು?
- ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ RawImage ಘಟಕವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆ ಮತ್ತು ಸ್ಟ್ರೀಮ್ ಕಾರ್ಯಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ನಿಮ್ಮ ಬ್ರೌಸರ್ನಲ್ಲಿ URL ಅನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ನಾನು MJPEG ಹೊರತುಪಡಿಸಿ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನು ಬಳಸಬಹುದೇ?
- ಹೌದು, ಯುನಿಟಿಯು RTSP ಯಂತಹ ಇತರ ಸ್ವರೂಪಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ, ಆದರೆ ಅವುಗಳನ್ನು ಡಿಕೋಡ್ ಮಾಡಲು ನಿಮಗೆ ಬಾಹ್ಯ ಪ್ಲಗಿನ್ಗಳು ಅಥವಾ ಉಪಕರಣಗಳು ಬೇಕಾಗುತ್ತವೆ.
- ದೊಡ್ಡ ಪ್ರಾಜೆಕ್ಟ್ಗಳಿಗಾಗಿ ನಾನು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು ಹೇಗೆ?
- ಬಳಸಿ UnityWebRequest ಬದಲಿಗೆ HttpWebRequest ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಕಡಿಮೆ ಮೆಮೊರಿ ಓವರ್ಹೆಡ್ಗಾಗಿ.
- ನಾನು ಯೂನಿಟಿಯಲ್ಲಿ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಬಹುದೇ?
- ಹೌದು, ನೀವು ಚೌಕಟ್ಟುಗಳನ್ನು a ಗೆ ಉಳಿಸಬಹುದು MemoryStream ಮತ್ತು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು MP4 ನಂತಹ ವೀಡಿಯೊ ಸ್ವರೂಪಕ್ಕೆ ಅವುಗಳನ್ನು ಎನ್ಕೋಡ್ ಮಾಡಿ.
- ಈ ಏಕೀಕರಣಕ್ಕೆ ಉತ್ತಮ ಬಳಕೆಯ ಸಂದರ್ಭ ಯಾವುದು?
- IoT ಮಾನಿಟರಿಂಗ್, ನೈಜ-ಸಮಯದ VR ಅನುಭವಗಳು ಅಥವಾ ಲೈವ್ ಈವೆಂಟ್ ಪ್ರಸಾರದಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಯುನಿಟಿಯಲ್ಲಿ ESP32 ಸ್ಟ್ರೀಮಿಂಗ್ ಏಕೀಕರಣದಿಂದ ಹೆಚ್ಚು ಪ್ರಯೋಜನ ಪಡೆಯುತ್ತವೆ.
ಏಕತೆಯಲ್ಲಿ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲು ಪ್ರಮುಖ ಟೇಕ್ಅವೇಗಳು
ಯೂನಿಟಿಯಲ್ಲಿ ESP32 ಕ್ಯಾಮರಾದಿಂದ ಲೈವ್ ವೀಡಿಯೊವನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲು MJPEG ಸ್ಟ್ರೀಮಿಂಗ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಯೂನಿಟಿಯ ಘಟಕಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸುವುದು ಅಗತ್ಯವಿದೆ. ಒದಗಿಸಿದ ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ, ಡೆವಲಪರ್ಗಳು ಐಒಟಿ ಸಾಧನಗಳಿಗೆ ಯುನಿಟಿಯನ್ನು ಸಂಪರ್ಕಿಸಬಹುದು ಮತ್ತು ನೈಜ-ಸಮಯದ ವೀಡಿಯೊವನ್ನು ಪ್ರದರ್ಶಿಸಬಹುದು ಕಚ್ಚಾ ಚಿತ್ರ. ಇದು ರೊಬೊಟಿಕ್ಸ್ ಮತ್ತು ವಿಆರ್ನಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಹೊಸ ಸಾಧ್ಯತೆಗಳನ್ನು ತೆರೆಯುತ್ತದೆ. 🎥
ಮೃದುವಾದ ಪ್ಲೇಬ್ಯಾಕ್ ಮತ್ತು ಸ್ಕೇಲೆಬಿಲಿಟಿಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು, ದೋಷಗಳನ್ನು ಆಕರ್ಷಕವಾಗಿ ನಿರ್ವಹಿಸುವುದು ಮತ್ತು ಸ್ಟ್ರೀಮಿಂಗ್ URL ಅನ್ನು ಸುರಕ್ಷಿತಗೊಳಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಈ ಅಭ್ಯಾಸಗಳು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚಿಸುವುದು ಮಾತ್ರವಲ್ಲದೆ ಯೋಜನೆಗಳನ್ನು ಹೆಚ್ಚು ದೃಢವಾಗಿ ಮತ್ತು ಬಳಕೆದಾರ ಸ್ನೇಹಿಯನ್ನಾಗಿ ಮಾಡುತ್ತದೆ. ಈ ಸಲಹೆಗಳೊಂದಿಗೆ, ಆರಂಭಿಕರೂ ಸಹ ತಮ್ಮ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮಿಂಗ್ ಸಂಯೋಜನೆಗಳಲ್ಲಿ ಯಶಸ್ವಿಯಾಗಬಹುದು.
ಯೂನಿಟಿಯಲ್ಲಿ ESP32 ವೀಡಿಯೊ ಸ್ಟ್ರೀಮಿಂಗ್ಗಾಗಿ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- MJPEG ಸ್ಟ್ರೀಮಿಂಗ್ ಮತ್ತು ಯೂನಿಟಿ ಏಕೀಕರಣದ ವಿವರಗಳು ಅಧಿಕೃತ ಯೂನಿಟಿ ದಾಖಲಾತಿಯಿಂದ ಸ್ಫೂರ್ತಿ ಪಡೆದಿವೆ. ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ ಯೂನಿಟಿ ರಾವಿಮೇಜ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ .
- ESP32 ಕ್ಯಾಮರಾ ಬಳಕೆ ಮತ್ತು HTTP ಸ್ಟ್ರೀಮ್ ಸೆಟಪ್ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ ರಾಂಡಮ್ ನೆರ್ಡ್ ಟ್ಯುಟೋರಿಯಲ್ಸ್ .
- ಕೊರೊಟೀನ್ಗಳು ಮತ್ತು ಯೂನಿಟಿವೆಬ್ರಿಕ್ವೆಸ್ಟ್ನ ಅನುಷ್ಠಾನವು ಉದಾಹರಣೆಗಳಿಂದ ಮಾರ್ಗದರ್ಶಿಸಲ್ಪಟ್ಟಿದೆ ಏಕತೆ ಕಲಿಯಿರಿ .
- IoT ಯೋಜನೆಗಳಿಗಾಗಿ MJPEG ಡೀಕೋಡಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವ ಒಳನೋಟಗಳನ್ನು ಪಡೆಯಲಾಗಿದೆ ಸ್ಟಾಕ್ ಓವರ್ಫ್ಲೋ ಚರ್ಚೆಗಳು .