Skip to content

Commit d16f489

Browse files
authored
Merge pull request #1140 from motasimfuad/flutter/webrtc
Add basic implementation of webrtc to flutter cheatsheet
2 parents 89deb9b + de42116 commit d16f489

File tree

1 file changed

+82
-1
lines changed

1 file changed

+82
-1
lines changed

data/flutter.json

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,87 @@
302302
}
303303
]
304304
},
305+
{
306+
"title": "ফ্লাটার WebRTC (Implementing WebRTC in Flutter)",
307+
"items": [
308+
{
309+
"definition": "WebRTC কি?",
310+
"code": "WebRTC হলো একটি ফ্রি এবং ওপেন সোর্স প্রজেক্ট। এটা দিয়ে খুব সহজেই, কোনো সার্ভার ছাড়াই ওয়েব ব্রাউজার বা মোবাইল অ্যাপে অডিও, ভিডিও কলের মতো রিয়েল টাইম কম্যুনিকেশন সেট করা যায়।"
311+
},
312+
{
313+
"definition": "WebRTC কানেকশনের ব্যাসিক আইডিয়া",
314+
"code": "WebRTC কনেকশনে ২টা peer (ডিভাইস) থাকে। একটা ইনিশিয়েটর(কল করে), অন্যটা রিসিভার(কল রিসিভ করে)। এই দুইটা ডিভাইসের মধ্যে কানেকশন তৈরি হতে হলে, উভয়ের ডিটেইলস(SDP, Ice Candidates) একে অন্যের কাছে পাঠাতে হবে। এইটাকে Signaling বলে।"
315+
},
316+
{
317+
"definition": "SDP (Session Description Protocol) কি?",
318+
"code": "সহজ ভাষায় SDP হলো একটি অবজেক্ট, যার ভিতরে দুইটা ডিভাইসের মধ্যে কানেকশন তৈরি করার জন্য প্রয়োজনীয় সব ইনফরমেশন থাকে।"
319+
},
320+
{
321+
"definition": "ICE (Interactive Connectivity Establishment) কি?",
322+
"code": "ICE হলো একটি প্রোটোকল, যার মাধ্যমে দুইটা ডিভাইসের মধ্যে কানেকশন তৈরি করা হয়।"
323+
},
324+
{
325+
"definition": "STUN (Session Traversal Utilities for NAT) কি?",
326+
"code": "দুইটা ডিভাইসের পাবলিক IP খুজে বের করার জন্য STUN সার্ভার ব্যবহার করা হয়।"
327+
},
328+
{
329+
"definition": "TURN (Traversal Using Relays around NAT) কি?",
330+
"code": "খুব সিকিউর কানেকশনে পাবলিক IP খুজে বের করার জন্য TURN সার্ভার ব্যবহার করা হয়।"
331+
},
332+
{
333+
"definition": "ফ্লাটারে কিভাবে WebRTC ইমপ্লিমেন্ট করবেন?",
334+
"code": "নেটিভ API ব্যবহার করে অথবা, Agora / ZegoCloud এর মতো বিল্টইন সলিউশন ব্যাবহার করে ফ্লাটারে WebRTC ইমপ্লিমেন্ট করা যায়।"
335+
},
336+
{
337+
"definition": "নেটিভ API ব্যবহার করে WebRTC ডিপেন্ডেন্সি যোগ করতে -",
338+
"code": "dependencies:\n flutter_webrtc: ^0.11.7"
339+
},
340+
{
341+
"definition": "androidmanifest.xml এ প্রয়োজনীয় পারমিশন যোগ করুন (Android)",
342+
"code": "<uses-feature android:name=\"android.hardware.camera\" />\n<uses-feature android:name=\"android.hardware.camera.autofocus\" />\n<uses-permission android:name=\"android.permission.CAMERA\" />\n<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />\n<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" />"
343+
},
344+
{
345+
"definition": "প্রয়োজনীয় পারমিশন যোগ করুন (iOS)",
346+
"code": "<key>NSCameraUsageDescription</key>\n<string>Camera permission description</string>\n<key>NSMicrophoneUsageDescription</key>\n<string>Microphone permission description</string>"
347+
},
348+
{
349+
"definition": "RTCPeerConnection তৈরি করুন",
350+
"code": "final Map<String, dynamic> configuration = {\n 'iceServers': [\n {'urls': 'stun:stun.l.google.com:19302'},\n ]\n};\nfinal pc = await createPeerConnection(configuration);"
351+
},
352+
{
353+
"definition": "লোকাল মিডিয়া স্ট্রিম যোগ করুন",
354+
"code": "final Map<String, dynamic> mediaConstraints = {\n 'audio': true,\n 'video': {\n 'facingMode': 'user',\n }\n};\nMediaStream stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\nawait pc.addStream(stream);"
355+
},
356+
{
357+
"definition": "Offer তৈরি করুন",
358+
"code": "RTCSessionDescription offer = await pc.createOffer();\nawait pc.setLocalDescription(offer);\n// Send this offer to the remote peer via your signaling server"
359+
},
360+
{
361+
"definition": "Answer রিসিভ করুন",
362+
"code": "// Assume 'answer' is received from the remote peer\nawait pc.setRemoteDescription(answer);"
363+
},
364+
{
365+
"definition": "ICE Candidate পাঠান",
366+
"code": "pc.onIceCandidate = (candidate) {\n // Send this candidate to the remote peer via your signaling server\n};"
367+
},
368+
{
369+
"definition": "রিমোট স্ট্রিম রিসিভ করুন",
370+
"code": "pc.onAddStream = (stream) {\n // Use this stream to display video/play audio from remote peer\n};"
371+
},
372+
{
373+
"definition": "কানেকশন বন্ধ করুন",
374+
"code": "await pc.close();\nawait stream.dispose();"
375+
},
376+
{
377+
"definition": "WebRTC ডিবাগিং",
378+
"code": "// Enable debug logging\nwebrtc.debugger.enabled = true;\n\n// For more detailed logging\nwebrtc.debugger.onEvent.listen((e) {\n print(e);\n});"
379+
},
380+
{
381+
"definition": "WebRTC শেখার কিছু রিসোর্স",
382+
"code": "https://webrtc.org\nhttps://codelabs.developers.google.com/codelabs/webrtc-web\nhttps://www.w3.org/TR/webrtc\n\nhttps://pub.dev/packages/flutter_webrtc"
383+
}
384+
]
385+
},
305386
{
306387
"title": "Flutter টেস্টিং (Flutter Testing)",
307388
"items": [
@@ -362,7 +443,7 @@
362443
"code": "flutter test --coverage\n# কভারেজ রিপোর্ট coverage/lcov.info ফাইলে জেনারেট হবে\n# HTML রিপোর্ট জেনারেট করতে lcov ইনস্টল করেন এবং নিচের কমান্ড চালান:\n# genhtml coverage/lcov.info -o coverage/html"
363444
}
364445
]
365-
},
446+
},
366447
{
367448
"title": "কিছু ইম্পরট্যান্ট ফ্লাটার শীট",
368449
"items": [

0 commit comments

Comments
 (0)