এই নির্দেশিকায় গুগল মিট মিডিয়া এপিআই-এর সাধারণ ত্রুটিগুলো সমাধান করার পদ্ধতি সম্পর্কে নির্দেশনা দেওয়া হয়েছে।
ত্রুটি কোডগুলির সমাধান করুন
connectActiveConference এন্ডপয়েন্ট থেকে প্রাপ্ত এরর কোডগুলো ট্রাবলশুটিং করার জন্য এখানে কিছু টিপস দেওয়া হলো:
| ত্রুটি কোড | |
|---|---|
NO_ACTIVE_CONFERENCE | নিশ্চিত করুন যে Meet Media API ক্লায়েন্টটি শুধুমাত্র তখনই সংযোগ করার চেষ্টা করে, যখন প্রমাণীকৃত ব্যবহারকারী মিটিং স্পেসের কোনো কনফারেন্সে আগে থেকেই উপস্থিত থাকেন। আপনি যদি কনফারেন্স শুরুর জন্য পোলিং করেন, তাহলে তার পরিবর্তে কনফারেন্স স্টার্ট ইভেন্ট ব্যবহার করুন। |
INVALID_OFFER | অফারের শর্তাবলী ভালোভাবে পড়ে দেখুন কোনো বিবরণ বাদ পড়েছে কিনা, যেমন ডেটা-প্রয়োজনীয় চ্যানেল খোলার বিষয়টি। এছাড়াও, আপনি আপনার অ্যাপের অফার স্ট্রিংটি উদাহরণ অফারের সাথে তুলনা করে কোনো পার্থক্য আছে কিনা তা খতিয়ে দেখতে পারেন। |
INCOMPATIBLE_DEVICE | কনফারেন্সের এক বা একাধিক ডিভাইস Meet Media API ক্লায়েন্টের সাথে সামঞ্জস্যপূর্ণ নয়। আপনার অ্যাপ এতে যোগ দিতে পারবে না, তাই এই বিষয়টি আপনার ব্যবহারকারীদের জানিয়ে দেওয়া উচিত। ডিভাইস সামঞ্জস্যপূর্ণ না হওয়ার কারণগুলোর মধ্যে একটি হলো, ডিভাইসটির সাথে যুক্ত অ্যাকাউন্টটি অপ্রাপ্তবয়স্ক বলে বিবেচিত হওয়া। আরও তথ্যের জন্য, ব্যবহারকারীর প্রয়োজনীয়তা দেখুন। |
UNSUPPORTED_PLATFORM_PRESENT | কনফারেন্সের এক বা একাধিক ডিভাইস Meet Media API ক্লায়েন্টের সাথে সামঞ্জস্যপূর্ণ নয়। আপনার অ্যাপ যোগদান করতে পারবে না, তাই আপনি আপনার ব্যবহারকারীদের এই বিষয়টি জানাতে পারেন। অসমর্থিত প্ল্যাটফর্মের কারণগুলোর মধ্যে রয়েছে মোবাইল অ্যাপের ন্যূনতম সংস্করণ পূরণ না করা এবং অসমর্থিত প্ল্যাটফর্ম থেকে যোগদান করা। আরও তথ্যের জন্য, ব্যবহারকারীর প্রয়োজনীয়তা দেখুন। |
CONNECTIONS_EXHAUSTED | একবারে শুধুমাত্র একটি Meet Media API ক্লায়েন্ট একটি কনফারেন্সে সংযোগ করতে পারে। আপনার অ্যাপটি ক্র্যাশ করলে, পুনরায় সংযোগ করার চেষ্টা করার সময় আপনি এই ত্রুটিটি দেখতে পারেন। এই ক্ষেত্রে, Meet-এর পূর্ববর্তী সংযোগটি টাইমআউট হওয়ার জন্য প্রায় ৩০ সেকেন্ড অপেক্ষা করুন। তারপর, আবার চেষ্টা করুন। |
CONSENTER_ABSENT | মিটিংটিতে কোনো যোগ্য সম্মতি প্রদানকারী নেই। গ্রাহক-মালিকানাধীন মিটিংয়ের ক্ষেত্রে, নিশ্চিত করুন যে উদ্যোগী ব্যক্তি মিটিংয়ে উপস্থিত আছেন। ওয়ার্কস্পেস মালিকদের মিটিংয়ের ক্ষেত্রে, মিটিংটির মালিক সেই সংস্থার অন্তত একজন সদস্য উপস্থিত থাকা উচিত। আরও তথ্যের জন্য, সম্মতি প্রদানকারীর আবশ্যকতা দেখুন। |
DISABLED_BY_ADMIN | প্রশাসক তার প্রতিষ্ঠানের জন্য Meet Media API নিষ্ক্রিয় করে দিয়েছেন। আপনি যদি এই সমস্যার সম্মুখীন হন, তবে মিটিং চলাকালীন এটি পরিবর্তন করা যাবে না। আরও তথ্যের জন্য, Meet Media API লাইফসাইকেল- এর চিত্র ৩ দেখুন। |
DISABLED_BY_HOST_CONTROL | হোস্ট মিটিংটির জন্য Meet Media API নিষ্ক্রিয় করে দিয়েছেন। আপনার অ্যাপ মিটিংয়ে যোগ দিতে পারবে না, তাই আপনি আপনার ব্যবহারকারীদের এই বিষয়টি জানিয়ে দিতে পারেন। আরও তথ্যের জন্য, Meet Media API লাইফসাইকেল- এর চিত্র ৫ দেখুন। |
DISABLED_DUE_TO_WATERMARKING | যখন ওয়াটারমার্কিং সক্রিয় থাকে, তখন Meet Media API মিটিংয়ে প্রবেশ করতে পারে না। আপনি আপনার ব্যবহারকারীদের এই বিষয়টি জানিয়ে দিতে পারেন। আরও তথ্যের জন্য, Meet Media API লাইফসাইকেল- এর চিত্র ২ দেখুন। |
DISABLED_DUE_TO_ENCRYPTION | এনক্রিপশন চালু থাকলে, Meet Media API মিটিংয়ে প্রবেশ করতে পারে না। একটি Meet কল চলাকালীন এটি পরিবর্তন করা যায় না। আপনি আপনার ব্যবহারকারীদের এই বিষয়টি জানিয়ে রাখতে পারেন। আরও তথ্যের জন্য, Meet Media API লাইফসাইকেল- এর চিত্র ২ দেখুন। |
একীভূত পরিকল্পনা
যদি ডেটা চ্যানেলগুলো কখনো না খোলে এবং আপনি কখনো অডিও বা ভিডিও না পান, তাহলে লোকাল পিয়ার কানেকশন কনফিগার করার সময় শুধুমাত্র ইউনিফাইড প্ল্যান ব্যবহার করা হচ্ছে কি না, তা যাচাই করুন।
মিডিয়ার বিবরণের ক্রম ত্রুটি
সেশন ডেসক্রিপশন প্রোটোকল (SDP) অফার ব্যবহার করে পিয়ার-টু-পিয়ার সংযোগ তৈরি করার সময়, আপনি এই ত্রুটিটি দেখতে পারেন:
Failed to execute 'setRemoteDescription' on 'RTCPeerConnection':
Failed to set remote answer sdp:
The order of m-lines in answer doesn't match order in offer. Rejecting answer.
এর মানে হলো, SDP উত্তরের মিডিয়া বর্ণনার লাইনগুলো SDP অফারের মিডিয়া বর্ণনার সাথে মেলে না:
| এসডিপি অফার | এসডিপি উত্তর |
|---|---|
✅ m=audio 9 UDP/TLS/RTP/SAVPF 111 | ✅ m=audio 9 UDP/TLS/RTP/SAVPF 111 |
❌ m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 | ❌ m=audio 9 UDP/TLS/RTP/SAVPF 111 |
✅ m=audio 9 UDP/TLS/RTP/SAVPF 111 | ✅ m=audio 9 UDP/TLS/RTP/SAVPF 111 |
❌ m=audio 9 UDP/TLS/RTP/SAVPF 111 | ❌ m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 |
এই ত্রুটিটি সমাধান করতে, পিয়ার কানেকশন অবজেক্ট সেট করার সময় নিশ্চিত করুন যে একই ধরনের মিডিয়া টাইপগুলো সঠিকভাবে কনফিগার করা হয়েছে এবং একসাথে গ্রুপ করা হয়েছে। ইন্টারলিভড মিডিয়া ডেসক্রিপশন সমর্থিত নয়।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে মিডিয়া বিবরণগুলি সঠিকভাবে মেলানো যায়:
সি++
rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection;
// Signal the entire video at once.
for (uint32_t i = 0; i < configurations.receiving_video_stream_count; ++i) {
webrtc::RtpTransceiverInit video_init;
video_init.direction = webrtc::RtpTransceiverDirection::kRecvOnly;
video_init.stream_ids = {absl::StrCat("video_stream_", i)};
webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>
video_result = peer_connection->AddTransceiver(
cricket::MediaType::MEDIA_TYPE_VIDEO, video_init);
// . . .
}
জাভাস্ক্রিপ্ট
pc = new RTCPeerConnection();
// Signal the entire video at once.
pc.addTransceiver(video, {'direction':'recvonly'});
pc.addTransceiver(video, {'direction':'recvonly'});
pc.addTransceiver(video, {'direction':'recvonly'});
DTLS রোল অ্যাট্রিবিউট ত্রুটি
DTLS রোল অ্যাট্রিবিউট সেট করার সময়, আপনি এই ত্রুটিটি দেখতে পারেন:
All DTLS roles must be one of [ACTIVE, ACTPASS].
এই ত্রুটিটি ঘটে যখন SDP অফারের সমস্ত মিডিয়া ডেসক্রিপশনের জন্য a=setup:< > অ্যাট্রিবিউটটি সঠিকভাবে সেট করা থাকে না।
এই ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে SDP অফারের প্রতিটি মিডিয়া ডেসক্রিপশনে নিম্নলিখিত আবশ্যক অ্যাট্রিবিউটগুলোর মধ্যে একটি রয়েছে:
-
a=setup:actpass -
a=setup:active
v=0
o=- 4743178474630771513 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101
. . .
a=setup:actpass
. . .
m=audio 39807 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=setup:actpass
. . .
অডিও সমস্যা সমাধান করুন
নিম্নলিখিত বিভাগগুলি আপনার অ্যাপের অডিও সমস্যা সমাধানে সাহায্য করতে পারে।
লগগুলো পরীক্ষা করুন
আপনি যদি ক্রোম ব্রাউজারে ওয়েব ক্লায়েন্ট ব্যবহার করেন:
- একটি নতুন ট্যাব খুলুন এবং অ্যাড্রেস বারে লিখুন:
chrome://webrtc-internals। -
Stats graph for inbound-rtpলেবেলযুক্ত বিভাগে যান। - প্যাকেট গৃহীত হচ্ছে কিনা তা দেখতে প্রতিটি অডিও গ্রাফ পরীক্ষা করুন।
আপনি যদি C++ রেফারেন্স ক্লায়েন্ট ব্যবহার করেন, তাহলে OnAudioFrame আদৌ কল করা হয় কিনা তা যাচাই করুন।
OAuth স্কোপগুলি যাচাই করুন
প্রাথমিক সংযোগ অনুরোধের সাথে সঠিক স্কোপ সরবরাহ করা হলেই কেবল অডিও প্রেরণ করা হয়। ত্রুটিটি সমাধান করতে, সঠিক OAuth 2.0 স্কোপ সরবরাহ করা নিশ্চিত করুন। আরও তথ্যের জন্য, Meet Media API scopes দেখুন।
কনফারেন্সটি সঠিকভাবে সেট আপ করা হয়েছে কিনা তা যাচাই করুন।
যখন ক্লায়েন্ট গুগল মিট সার্ভারের সাথে সংযুক্ত হয়, তখন এটি স্বয়ংক্রিয়ভাবে কনফারেন্সে প্রবেশাধিকার পায় না। নিশ্চিত করুন যে আপনি সেশন কন্ট্রোল ডেটা চ্যানেলের মাধ্যমে
STATE_JOINEDস্টেট সহ একটি সেশন কন্ট্রোল রিসোর্স আপডেট পেয়েছেন।{"sessionStatus":{"connectionState":"STATE_JOINED"}}নিশ্চিত করুন যে কনফারেন্সে অন্য অংশগ্রহণকারীদের অডিও স্ট্রিম মিউট করা নেই।
অডিওর জন্য আপনার সংকেত যাচাই করুন।
Meet শুধুমাত্র তখনই অডিও প্রদান করে, যদি আপনি SDP অফারে এর সংকেত দেন। অফারটিতে অবশ্যই তিনটি, শুধুমাত্র-গ্রহণযোগ্য, অডিও মিডিয়া বিবরণ থাকতে হবে।
m=audio 39807 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:0
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:1
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:2
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .
Meet সার্ভারগুলিতে কোনো বৈধ অফার গৃহীত হলে, সেগুলি তিনটি প্রেরণ-যোগ্য অডিও মিডিয়া বিবরণসহ একটি SDP উত্তর পাঠায়।
m=audio 19306 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:0
. . .
a=sendonly
a=msid:virtual-6666 virtual-6666
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:1
. . .
a=sendonly
a=msid:virtual-6667 virtual-6667
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:2
. . .
a=sendonly
a=msid:virtual-6668 virtual-6668
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .
আপনার অবজারভার ইমপ্লিমেন্টেশন পরীক্ষা করুন
ডেটা প্রসেসিং অন্য কোনো থ্রেডে স্থানান্তর করলে অডিও ডেটার কপি তৈরি করে নিতে ভুলবেন না। AudioFrame.pcm16 মূলত অন্তর্নিহিত ডেটার একটি রেফারেন্স, তাই OnAudioFrame পরে এটি অ্যাক্সেস করার চেষ্টা করলে সেগমেন্টেশন ফল্টের মতো অনির্ধারিত আচরণ দেখা দেয়।
ভিডিও সমস্যা সমাধান করুন
নিম্নলিখিত বিভাগগুলি আপনার অ্যাপের ভিডিও সংক্রান্ত সমস্যা সমাধানে সাহায্য করতে পারে।
লগগুলো পরীক্ষা করুন
আপনি যদি ক্রোম ব্রাউজারে ওয়েব ক্লায়েন্ট ব্যবহার করেন:
- একটি নতুন ট্যাব খুলুন এবং অ্যাড্রেস বারে লিখুন:
chrome://webrtc-internals। -
Stats graph for inbound-rtpলেবেলযুক্ত বিভাগে যান। - প্যাকেট গৃহীত হচ্ছে কিনা তা দেখতে প্রতিটি ভিডিও গ্রাফ পরীক্ষা করুন।
আপনি যদি C++ রেফারেন্স ক্লায়েন্ট ব্যবহার করেন, তাহলে OnVideoFrame আদৌ কল করা হয় কিনা তা যাচাই করুন।
OAuth স্কোপগুলি যাচাই করুন
প্রাথমিক সংযোগ অনুরোধের সাথে সঠিক স্কোপ সরবরাহ করা হলেই কেবল ভিডিও প্রেরণ করা হয়। ত্রুটিটি সমাধান করতে, সঠিক OAuth 2.0 স্কোপ সরবরাহ করা নিশ্চিত করুন। আরও তথ্যের জন্য, Meet Media API scopes দেখুন।
কনফারেন্সটি সঠিকভাবে সেট আপ করা হয়েছে কিনা তা যাচাই করুন।
যখন ক্লায়েন্ট Meet সার্ভারের সাথে সংযোগ স্থাপন করে, তখন তাকে স্বয়ংক্রিয়ভাবে কনফারেন্সে প্রবেশাধিকার দেওয়া হয় না। নিশ্চিত করুন যে আপনি সেশন কন্ট্রোল ডেটা চ্যানেলের মাধ্যমে
STATE_JOINEDস্টেট সহ একটি সেশন কন্ট্রোল রিসোর্স আপডেট পেয়েছেন।{"sessionStatus":{"connectionState":"STATE_JOINED"}}নিশ্চিত করুন যে কনফারেন্সের অন্য অংশগ্রহণকারীদের ভিডিও স্ট্রিম মিউট করা নেই।
ভিডিওর জন্য আপনার সংকেত যাচাই করুন।
Meet শুধুমাত্র তখনই ভিডিও প্রদান করে, যখন SDP অফারে তার সংকেত দেওয়া থাকে। অফারটিতে সর্বোচ্চ তিনটি, শুধুমাত্র-গ্রহণযোগ্য, ভিডিও মিডিয়া বিবরণ অবশ্যই থাকতে হবে।
v=0
o=- 4743178474630771513 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 35 36 37 38 102 103 104 105 106 107 108 109 127 125 39 40 41 42 43 44 45 46 47 48 112 113 114 115 116 117 118 49
. . .
a=setup:actpass
a=mid:1
. . .
a=recvonly
. . .
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
. . .
Meet যদি একটি বৈধ অফার পায়, তবে এটি n সংখ্যক প্রেরণ-যোগ্য ভিডিও মিডিয়া বিবরণসহ একটি SDP উত্তর পাঠায়, যেখানে n হলো SDP অফারটিতে থাকা ভিডিও মিডিয়া বিবরণের সংখ্যা।
v=0
o=- 0 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=msid-semantic: WMS virtual-video-7777/7777
a=ice-lite
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99
. . .
a=setup:passive
a=mid:1
. . .
a=msid:virtual-video-7777/7777 virtual-video-7777/7777
a=rtcp-mux
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 goog-remb
. . .
ভিডিও না থাকলে সমস্যা সমাধান করুন
- Meet সার্ভারগুলিতে পাঠানো SDP অফারে
m=video …আছে কিনা তা যাচাই করুন। - প্রতিটি
m=videoলাইনের অধীনেa=recvonlyএকটি অ্যাট্রিবিউট কিনা তা যাচাই করুন। - যাচাই করুন যে SDP উত্তরে সমান সংখ্যক
m=videoলাইন বিদ্যমান আছে। - SDP উত্তরে প্রতিটি
m=videoলাইনের অধীনেa=sendonlyঅথবাa=sendrecvঅ্যাট্রিবিউট হিসেবে আছে কিনা তা যাচাই করুন। - Meet সার্ভারগুলিতে একটি সফল
VideoAssignmentRequestপাঠানো হয়েছে এবং গৃহীত হয়েছে কিনা তা যাচাই করুন। সাফল্য বা ব্যর্থতার বিষয়টি একই ডেটা চ্যানেলের মাধ্যমে ক্লায়েন্টকে জানানো উচিত।
প্রত্যাশার চেয়ে কম ভিডিও স্ট্রিমের সমস্যা সমাধান করা হয়েছে।
- যাচাই করুন যে SDP অফারটিতে সঠিক সংখ্যক
m=video …লাইন রয়েছে। - নিশ্চিত করুন যে SDP অ্যানসারের সমস্ত
m=videoডেসক্রিপশনে একটিa=sendonlyঅথবাa=sendrecvঅ্যাট্রিবিউট রয়েছে। অ্যানসারেa=recvonlyহিসেবে চিহ্নিত যেকোনো লাইন ক্লায়েন্টের কাছে পাঠানো স্ট্রিমের পরিমাণ সেই পরিমাণ কমিয়ে দেয়।
আপনার অবজারভার ইমপ্লিমেন্টেশন পরীক্ষা করুন
ডেটা প্রসেসিং অন্য কোনো থ্রেডে স্থানান্তর করলে ভিডিও ডেটার কপি তৈরি করে নিতে ভুলবেন না। VideoFrame.frame মূলত অন্তর্নিহিত ডেটার একটি রেফারেন্স, তাই OnVideoFrame পরে এটি অ্যাক্সেস করার চেষ্টা করলে সেগমেন্টেশন ফল্টের মতো অনির্ধারিত আচরণ দেখা দেবে।