[{"data":1,"prerenderedAt":362},["ShallowReactive",2],{"project-18166753":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":46,"post_text":48,"what":49,"said":90,"maker_in_thread":188,"shape":198,"grid":202,"attempts":325,"same_week":326,"maker_shows":34,"maker_hidden":354,"reader_version":355,"card":356},"18166753","aiortc","WebRTC implementation for Python using Asyncio","title","Show HN: WebRTC implementation for Python using Asyncio","https:\u002F\u002Fgithub.com\u002Fjlaine\u002Faiortc\u002F","github.com","jlaine",1539001391,2018,216,51,159,2155,8,"notable","languages","webrtc library","library",[24,25,26,27,28],"webrtc","python","asyncio","datachannel","sctp","curious",0.246,{"positive":32,"neutral":33,"mixed":34,"critical":35},7,12,1,3,23,{"idea":38,"execution":41,"design":43,"docs":44,"performance":45},{"positive":39,"critical":40},4,0,{"positive":42,"critical":34},2,{"positive":40,"critical":34},{"positive":40,"critical":40},{"positive":40,"critical":34},[47,40,35,35,35,35,35,35,34,40,35,40,40,47,35,47,40,40,40,40,40,40,40,40,40,47,40,40,35,47,35,35,34,40,40,40,40,35,35,47],5,null,{"problem":50,"audience":62,"pricing":48,"motivation":48,"time_to_build":48,"stack":70,"openness":88,"stage":89,"team_size":89},{"value":51,"source":52,"evidence":53},"Lets Python programs use WebRTC outside a browser","commenter",[54,58],{"id":55,"by":56,"text":57},"18167650","znpy","OMG this is a godsend! I've wanted to do webrtc outside of a browser in python for a while now but there was no available implementations (besides the native one, and I didn't…",{"id":59,"by":60,"text":61},"18168637","shazow","This is super cool, great work! It's the second (mostly-)language-native implementation[1] outside of a browser that I'm aware of, both started this year despite the WebRTC spec…",{"value":63,"source":64,"evidence":65},"Python developers building WebRTC applications","inferred",[66,67],{"id":55,"by":56,"text":57},{"id":68,"by":11,"text":69},"18167579","Absolutely, might as well enjoy the rich Python ecosystem! Starting with aiortc 0.9.9, there is now also deep integration with PyAV for all your FFmpeg needs. - At the lowest…",[71,75,80,84],{"value":72,"source":52,"evidence":73},"Python",[74],{"id":59,"by":60,"text":61},{"value":26,"source":76,"evidence":77},"maker",[78],{"id":79},"post",{"value":81,"source":76,"evidence":82},"PyAV",[83],{"id":68,"by":11,"text":69},{"value":85,"source":76,"evidence":86},"FFmpeg",[87],{"id":68,"by":11,"text":69},"open_source","unknown",{"praise":91,"objections":115,"requests":132,"questions":144,"alternatives":160},[92,104],{"value":93,"source":52,"evidence":94},"Impressive, useful library for WebRTC outside browsers",[95,99,100],{"id":96,"by":97,"text":98},"18167688","gfodor","This is really impressive! Seems like a great way to learn WebRTC and potentially is going to be much more portable than the reference C++ implementation.",{"id":59,"by":60,"text":61},{"id":101,"by":102,"text":103},"18167337","ArtWomb","Great work! Thanks for this. Scripting WebRTC is always a hassle. And the CV integration will make things easier ;)",{"value":105,"source":52,"evidence":106},"Hard to implement, kudos on DTLS and SCTP work",[107,111],{"id":108,"by":109,"text":110},"18168695","ndesaulniers","Wow! This is hard to do! I got most of an ICE implementation done in Node.js then got completely hung up on DTLS. Kudos!",{"id":112,"by":113,"text":114},"18168993","simmons","Great work! I can really appreciate the effort you likely put into re-implementing SCTP, since I'm currently working on implementing SCTP in Rust for the same reasons (WebRTC…",[116,126],{"value":117,"source":52,"evidence":118},"Spec compliance gaps in RTCRtpSender and simulcast parameters",[119,123],{"id":120,"by":121,"text":122},"18168188","Orphis","Nice work! As a WebRTC implementer (both native and in Chrome), I applaud the work! But I can only notice quite a bit of mismatch between your APIs and the current spec. Do you…",{"id":124,"by":121,"text":125},"18168507","Anything related to RTCRtpSendParameters (previously RTCRtpEncodingParameters) really. For example, RTCRtpSender.getParameters is missing and the setParameters seems to be…",{"value":127,"source":52,"evidence":128},"Mixes WebRTC and ORTC APIs",[129],{"id":130,"by":121,"text":131},"18172552","Also, my take on this is that you should probably not mix WebRTC and ORTC APIs. Those are quite different (even if there are similarities). If you want to implement ORTC, fine,…",[133,137],{"value":134,"source":52,"evidence":135},"Update API to match current WebRTC spec",[136],{"id":120,"by":121,"text":122},{"value":138,"source":52,"evidence":139},"Example code for end-to-end hello world",[140],{"id":141,"by":142,"text":143},"18168409","pranaysharma","Hi can the author or someone point to a hello world code using end-to-end of the above code?",[145,149,153],{"value":146,"source":52,"evidence":147},"Can it handle signalling on its own?",[148],{"id":55,"by":56,"text":57},{"value":150,"source":52,"evidence":151},"Can it be used for desktop applications?",[152],{"id":55,"by":56,"text":57},{"value":154,"source":52,"evidence":155},"Performance limits of Python for this library?",[156],{"id":157,"by":158,"text":159},"18170601","Dowwie","Can you comment on any performance hotspots due to Python (are there any)? What wouldn't this library be suitable for?",[161,169,175,181],{"value":162,"source":52,"evidence":163},"Pions WebRTC in Go",[164,165],{"id":59,"by":60,"text":61},{"id":166,"by":167,"text":168},"18171226","Sean-Der","That's awesome simmons! I can't wait to see Rust\u002FPython\u002FGo\u002FNode all talking directly to each other. I really want to see a world where P2P communication is common. It could…",{"value":170,"source":76,"evidence":171},"Embedding a browser such as QtWebEngine",[172],{"id":173,"by":11,"text":174},"18167933","Signaling is a very app-specific question, as you can use a wide range of options. If you take a look at the \"apprtc\" example, it's a demo which uses appr.tc's signaling. You can…",{"value":176,"source":76,"evidence":177},"rawrtc",[178],{"id":179,"by":11,"text":180},"18169856","I can confirm you can get data channels to work with zero SCTP extensions, I only added them afterwards! One implementation (libusrsctp-based) you might want to interop with is…",{"value":182,"source":52,"evidence":183},"OpenVidu",[184],{"id":185,"by":186,"text":187},"18169744","Immortalin","If you are trying to build e.g. Twitch or Discord, you want to have a server backend to handle processing, hide user IPs from each other for privacy etc. (the term you are…",{"comments":189,"answered":47,"key":190},10,[191,192,195],{"id":173,"text":174},{"id":193,"text":194},"18168340","Is there any specific area you spotted which would need some love? Modern spec compliance is most definitely a goal (e.g. RTCRtpTransceiver has been there from the start, aiortc…",{"id":196,"text":197},"18168790","Duly noted, I've opened an issue to track this: https:\u002F\u002Fgithub.com\u002Fjlaine\u002Faiortc\u002Fissues\u002F76 aiortc's RTCPeerConnection indeed uses RTCRtpSender.send to apply parameters. This is…",{"commenters":199,"max_depth":47,"maker_replies":189,"first_comment_mins":200,"lifespan_hours":201},29,69,25,[203,205,207,211,212,215,217,220,222,224,225,227,228,230,231,234,237,239,241,244,246,248,251,252,255,257,260,261,264,266,268,270,271,274,277,280,283,284,285,289,291,294,299,302,304,306,309,311,314,318,320],[55,40,47,204,56,40],"project\u002Fpositive\u002Fidea",[173,40,40,206,11,34],"maker\u002Fneutral\u002Fnone",[208,40,35,209,210,40],"18168640","project\u002Fneutral\u002Fidea","tw1010",[185,40,35,209,186,40],[213,40,35,209,214,40],"18170582","pmalynin",[216,40,35,209,97,40],"18170862",[218,40,35,209,219,40],"18170873","plq",[221,40,35,209,56,40],"18175857",[120,34,35,223,121,40],"project\u002Fmixed\u002Fexecution",[193,34,40,206,11,34],[124,34,34,226,121,40],"project\u002Fcritical\u002Fexecution",[196,34,40,206,11,34],[130,34,34,229,121,40],"project\u002Fcritical\u002Fdesign",[59,42,47,204,60,40],[232,35,40,233,97,40],"18170883","other\u002Fneutral\u002Fnone",[235,35,40,233,236,40],"18171724","evadne",[108,39,47,238,109,40],"maker\u002Fpositive\u002Fexecution",[141,47,35,240,142,40],"project\u002Fneutral\u002Fdocs",[242,47,40,243,11,34],"18169921","maker\u002Fneutral\u002Fdocs",[112,245,47,238,113,40],6,[247,245,40,206,11,34],"18169281",[249,245,40,250,113,40],"18169724","commenter\u002Fneutral\u002Fnone",[179,245,40,206,11,34],[253,245,40,233,254,40],"18169373","jswrenn",[256,245,40,233,113,40],"18169668",[258,245,40,233,259,40],"18172197","mquander",[166,245,40,233,167,40],[262,245,40,233,263,40],"18172012","kodablah",[265,245,40,250,167,40],"18172217",[267,245,40,233,263,40],"18172396",[269,245,40,233,263,40],"18173367",[96,32,47,204,97,40],[272,32,40,233,273,40],"18167954","stochastic_monk",[275,32,40,233,276,40],"18168109","Longhanks",[278,32,40,233,279,40],"18169560","todd8",[281,32,35,282,97,40],"18168381","project\u002Fneutral\u002Fnone",[101,18,47,204,102,40],[68,18,40,206,11,34],[286,287,35,209,288,40],"18169427",9,"bkovacev",[157,189,35,290,158,40],"project\u002Fneutral\u002Fperformance",[292,189,40,293,11,34],"18170742","maker\u002Fneutral\u002Fperformance",[295,296,34,297,298,40],"18167215",11,"project\u002Fcritical\u002Fperformance","rjsw",[300,296,40,233,301,40],"18167447","detaro",[303,296,40,233,298,40],"18167543",[305,296,40,233,301,40],"18167643",[307,296,40,233,308,40],"18168015","gsnedders",[310,296,40,206,11,34],"18167546",[312,33,35,206,313,40],"18169973","comesee",[315,316,35,209,317,40],"18167575",13,"londt8",[319,316,40,206,11,34],"18167605",[321,322,47,323,324,40],"18168383",14,"maker\u002Fpositive\u002Fnone","jgh",[],[327,332,336,341,345,350],{"id":328,"name":329,"points":330,"category":331},"18166538","Alan",413,"dev_tools",{"id":333,"name":334,"points":335,"category":331},"18154825","Markdown page",169,{"id":337,"name":338,"points":339,"category":340},"18154427","Trigonoparty",144,"learning_science",{"id":342,"name":343,"points":344,"category":331},"18183334","Percollate",123,{"id":346,"name":347,"points":348,"category":349},"18166090","Firebase2graphql",114,"infrastructure",{"id":351,"name":352,"points":353,"category":20},"18155262","Fork",58,false,"v2",{"id":357,"name":5,"line":6,"ai":354,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":358,"top":18,"kw":359,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":360,"url":9,"mix":361,"praise":93,"objection":117,"sub":21},18166753,0.25,[24,25,26,27,28],"5033333310300535000000000500353310000335",[32,33,34,35],1793990980480]