प्रौद्योगिकी साझेदारी

VR हेडसेट् न्यूनविलम्बेन सह 8K RTSP|RTMP स्ट्रीम कथं वादयति?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

तकनीकी पृष्ठभूमि

यदा वयं यूनिटी मञ्चस्य कृते RTSP तथा RTMP प्लेयर् निर्मास्यामः तदा केचन कम्पनयः एतादृशीः तकनीकी आवश्यकताः अग्रे कृतवन्तः, हेडसेट् इत्यत्र पैनोरमिक 8K RTSP|RTMP लाइव स्ट्रीम्स् तथा 8K डाटा क्रीडितुं आशां कुर्वन्तः, येन हेडसेट् तथा प्लेयर् कृते नूतनाः विचाराः प्रस्ताविताः आवश्यकताः, वयं चर्चां कुर्मः यत् VR हेड-माउण्टेड् उपकरणाः कथं 8K RTSP|RTMP स्ट्रीमिंग् डाटा अनेकपक्षेभ्यः क्रीडन्ति:

1. खिलाडी समर्थनम्

  1. संगतता : प्रथमं RTSP|RTMP प्लेयर् 8K रिजोल्यूशन विडियो स्ट्रीमिंग् समर्थयितुं आवश्यकम् अस्ति । अस्य अर्थः अस्ति यत् प्लेयरः 8K विडियो डिकोड् कर्तुं शक्नोति तथा च 8K रिजोल्यूशन समर्थयति इति प्रदर्शनयन्त्रे प्ले कर्तुं शक्नोति इति वक्तुं नावश्यकता वर्तते।
  2. डिकोडिंग क्षमता : 8K विडियो धारायां बृहत् परिमाणं आँकडानां नियन्त्रणार्थं खिलाडये शक्तिशालिनः डिकोडिंग् क्षमता आवश्यकाः सन्ति । एतदर्थं प्रायः खिलाडयः कुशल-डिकोडिंग्-एल्गोरिदम्-उपयोगं कर्तुं तथा च हार्डवेयर-त्वरण-कार्यस्य (यथा GPU-त्वरणम्) पूर्णतया उपयोगं कर्तुं आवश्यकं भवति, यत् हेडसेट्-इत्यस्य 8K-हार्ड-डिकोडिंग्-समर्थनस्य आवश्यकता भवति

2. संजालस्य आवश्यकताः

  1. बैण्डविड्थ : 8K विडियो स्ट्रीमिंग् इत्यस्य वास्तविकसमयसञ्चारस्य समर्थनार्थं अत्यन्तं उच्चं नेटवर्क् बैण्डविड्थ् आवश्यकम् अस्ति । सुनिश्चितं कुर्वन्तु यत् संजालस्य बैण्डविड्थः पर्याप्तं विशालः अस्ति यत् प्लेबैकस्य समये पश्चात्तापः, विलम्बः अथवा बफरिंग् इत्यादीनां समस्यानां परिहारः भवति यदि एतत् इन्ट्रानेट् वातावरणं भवति तर्हि मूलतः बैण्डविड्थ्-समस्यानां विषये चिन्ता न कुर्वन्तु ।
  2. स्थिरता : जालसंयोजनस्य स्थिरता अपि अतीव महत्त्वपूर्णा अस्ति। अस्थिरजालसंयोजनेन विडियो स्ट्रीमिंग् बाधितं वा गुणवत्तायाः अवनतिः वा भवितुम् अर्हति ।

3. हार्डवेयर आवश्यकताएँ

  1. प्रोसेसर तथा स्मृति: VR हेडसेट् 8K विडियो स्ट्रीम्स् क्रीडन्ति, ये VR हेडसेट् इत्यस्य प्रदर्शने अतीव उच्चानि आवश्यकतानि स्थापयन्ति उदाहरणार्थं quest3 इति उत्तमः विकल्पः अस्ति ।

4. प्लेबैक-पदार्थाः

  1. RTSP प्लेयर इत्यस्य चयनं कुर्वन्तु: अस्माकं दृष्टिकोणं हार्ड डिकोडिंग् मोड् मध्ये Daniu Live SDK इत्यस्य मूलनिवासी RTSP|RTMP प्लेयरस्य उपयोगः अस्ति यत् डिकोड् कृतं YUV अथवा RGB आँकडा एकतायां पुनः आह्वयितुं शक्नुमः अतीव विशालः, विशेषतः विकोडितदत्तांशः, यदि परिस्थितयः अनुमतिं ददति तर्हि प्रतिलिपानि यथासम्भवं न्यूनीकर्तुं आवश्यकम् ।

तकनीकी साक्षात्कार

अयं लेखः Daniu Live SDK इत्यस्य Android platform Unity3D RTSP|RTMP प्लेबैक् मॉड्यूल् उदाहरणरूपेण गृह्णाति:

क्रीडितुं आरभत : १.

  1. /*
  2. * SmartPlayerAndroidMono.cs
  3. * Author: daniusdk.com
  4. * QQ:89030985
  5. */
  6. public void Play()
  7. {
  8. if (is_running)
  9. {
  10. Debug.Log("已经在播放。。");
  11. return;
  12. }
  13. //获取输入框的url
  14. string url = input_url_.text.Trim();
  15. if (!url.StartsWith("rtmp://") && !url.StartsWith("rtsp://"))
  16. {
  17. videoUrl = "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream";
  18. }
  19. else
  20. {
  21. videoUrl = url;
  22. }
  23. OpenPlayer();
  24. if ( player_handle_ == 0 )
  25. return;
  26. NT_U3D_Set_Game_Object(player_handle_, game_object_);
  27. /* ++ 播放前参数配置可加在此处 ++ */
  28. int is_using_tcp = 0; //TCP/UDP模式设置
  29. NT_U3D_SetRTSPTcpMode(player_handle_, is_using_tcp);
  30. int is_report = 0;
  31. int report_interval = 1;
  32. NT_U3D_SetReportDownloadSpeed(player_handle_, is_report, report_interval); //下载速度回调
  33. NT_U3D_SetBuffer(player_handle_, play_buffer_time_); //设置buffer time
  34. NT_U3D_SetPlayerLowLatencyMode(player_handle_, is_low_latency_ ? 1 : 0); //设置是否启用低延迟模式
  35. NT_U3D_SetMute(player_handle_, is_mute_ ? 1 : 0); //是否启动播放的时候静音
  36. NT_U3D_SetAudioVolume(player_handle_, cur_audio_volume_); //设置播放音量
  37. NT_U3D_SetVideoDecoderMode(player_handle_, is_hw_decode_ ? 1 : 0); //设置H.264软硬解模式
  38. NT_U3D_SetVideoHevcDecoderMode(player_handle_, is_hw_decode_ ? 1 : 0); //设置H.265软硬解模式
  39. int is_output = 1;
  40. int disable_use_image_planes = 0;
  41. bool is_supports_texture_format = SystemInfo.SupportsTextureFormat(TextureFormat.RG16);
  42. Debug.Log("is_supports_texture_format: " + is_supports_texture_format);
  43. int is_supported_multiple_format = is_supports_texture_format? 1:0;
  44. int max_images = 3;
  45. int buffer_pool_max_size = 0;
  46. NT_U3D_SetImageReaderOutput(player_handle_, is_output, disable_use_image_planes, is_supported_multiple_format, max_images, buffer_pool_max_size); //硬解码image reader
  47. int is_fast_startup = 1;
  48. NT_U3D_SetFastStartup(player_handle_, is_fast_startup); //设置快速启动模式
  49. int rtsp_timeout = 10;
  50. NT_U3D_SetRTSPTimeout(player_handle_, rtsp_timeout); //设置RTSP超时时间
  51. int is_auto_switch_tcp_udp = 1;
  52. NT_U3D_SetRTSPAutoSwitchTcpUdp(player_handle_, is_auto_switch_tcp_udp); //设置TCP/UDP模式自动切换
  53. int is_audiotrack = 1;
  54. NT_U3D_SetAudioOutputType(player_handle_, is_audiotrack); //设置音频输出模式: if 0: 自动选择; if with 1: audiotrack模式
  55. NT_U3D_SetUrl(player_handle_, videoUrl);
  56. /* -- 播放前参数配置可加在此处 -- */
  57. int flag = NT_U3D_StartPlay(player_handle_);
  58. if (flag == DANIULIVE_RETURN_OK)
  59. {
  60. is_need_get_frame_ = true;
  61. Debug.Log("播放成功");
  62. }
  63. else
  64. {
  65. is_need_get_frame_ = false;
  66. Debug.LogError("播放失败");
  67. }
  68. is_running = true;
  69. }

तत्सम्बद्धं OpenPlayer() कार्यान्वयनम् अस्ति ।

  1. private void OpenPlayer()
  2. {
  3. if ( java_obj_cur_activity_ == null )
  4. {
  5. Debug.LogError("getApplicationContext is null");
  6. return;
  7. }
  8. player_handle_ = NT_U3D_Open();
  9. if (player_handle_ != 0)
  10. Debug.Log("open success");
  11. else
  12. Debug.LogError("open fail");
  13. }

बन्दः खिलाडी : १.

  1. private void ClosePlayer()
  2. {
  3. is_need_get_frame_ = false;
  4. is_need_init_texture_ = false;
  5. int flag = NT_U3D_StopPlay(player_handle_);
  6. if (flag == DANIULIVE_RETURN_OK)
  7. {
  8. Debug.Log("停止成功");
  9. }
  10. else
  11. {
  12. Debug.LogError("停止失败");
  13. }
  14. flag = NT_U3D_Close(player_handle_);
  15. if (flag == DANIULIVE_RETURN_OK)
  16. {
  17. Debug.Log("关闭成功");
  18. }
  19. else
  20. {
  21. Debug.LogError("关闭失败");
  22. }
  23. player_handle_ = 0;
  24. NT_U3D_UnInit();
  25. is_running = false;
  26. video_format_ = VideoFrame.FORMAT_UNKNOWN;
  27. video_width_ = 0;
  28. video_height_ = 0;
  29. }

ताजगीदत्तांशं अद्यतनं कुर्वन्तु:

  1. private void Update()
  2. {
  3. if (!is_need_get_frame_)
  4. return;
  5. if (player_handle_ == 0)
  6. return;
  7. AndroidJavaObject u3d_video_frame_obj = NT_U3D_GetVideoFrame(player_handle_);
  8. if (u3d_video_frame_obj == null)
  9. {
  10. return;
  11. }
  12. VideoFrame converted_video_frame = ConvertToVideoFrame(u3d_video_frame_obj);
  13. if (converted_video_frame == null)
  14. {
  15. u3d_video_frame_obj.Call("release");
  16. u3d_video_frame_obj = null;
  17. return;
  18. }
  19. if (!is_need_init_texture_)
  20. {
  21. if (converted_video_frame.format_ != video_format_)
  22. {
  23. is_need_init_texture_ = true;
  24. }
  25. else if (converted_video_frame.width_ != video_width_
  26. || converted_video_frame.height_ != video_height_
  27. || converted_video_frame.stride0_ != y_row_bytes_
  28. || converted_video_frame.stride1_ != u_row_bytes_
  29. || converted_video_frame.stride2_ != v_row_bytes_)
  30. {
  31. is_need_init_texture_ = true;
  32. }
  33. }
  34. if (is_need_init_texture_)
  35. {
  36. if (InitYUVTexture(converted_video_frame))
  37. {
  38. is_need_init_texture_ = false;
  39. }
  40. }
  41. UpdateYUVTexture(converted_video_frame);
  42. converted_video_frame.java_frame_obj_ = null;
  43. converted_video_frame = null;
  44. u3d_video_frame_obj.Call("release");
  45. u3d_video_frame_obj = null;
  46. }

सारांशं कुरुत

यदि VR हेडसेट् 8K RTSP अथवा RTSP स्ट्रीम्स् क्रीडितुं आवश्यकं भवति तर्हि तस्य हार्डवेयर तथा नेटवर्क् इत्येतयोः विषये अतीव उच्चाः आवश्यकताः सन्ति, अतः व्यावहारिक-अनुप्रयोगेषु तस्य केषाञ्चन आव्हानानां सामना भवितुम् अर्हति वास्तविकपरीक्षणस्य माध्यमेन, quest3 हेडसेट्, अस्माकं RTSP|RTMP प्लेयरेण सह मिलित्वा, यूनिटी इत्यस्मिन् 8K विडियो डाटा प्लेबैकस्य मिलीसेकेण्ड्-स्तरस्य विलम्बं प्राप्तुं शक्नोति यत् अत्यन्तं उच्चैः वास्तविकसमयस्य आवश्यकताभिः सह उपयोगपरिदृश्यं पूरयितुं शक्नोति यथा संतुलननियन्त्रणम् मया सह व्यक्तिगतरूपेण।