{"action":"created","issue":{"url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/738","repository_url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS","labels_url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/738/labels{/name}","comments_url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/738/comments","events_url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/738/events","html_url":"https://github.com/ChatSecure/ChatSecure-iOS/issues/738","id":221413171,"number":738,"title":"WebRTC Support for VoIP calls","user":{"login":"tmolitor-stud-tu","id":6234248,"avatar_url":"https://avatars3.githubusercontent.com/u/6234248?v=3","gravatar_id":"","url":"https://api.github.com/users/tmolitor-stud-tu","html_url":"https://github.com/tmolitor-stud-tu","followers_url":"https://api.github.com/users/tmolitor-stud-tu/followers","following_url":"https://api.github.com/users/tmolitor-stud-tu/following{/other_user}","gists_url":"https://api.github.com/users/tmolitor-stud-tu/gists{/gist_id}","starred_url":"https://api.github.com/users/tmolitor-stud-tu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmolitor-stud-tu/subscriptions","organizations_url":"https://api.github.com/users/tmolitor-stud-tu/orgs","repos_url":"https://api.github.com/users/tmolitor-stud-tu/repos","events_url":"https://api.github.com/users/tmolitor-stud-tu/events{/privacy}","received_events_url":"https://api.github.com/users/tmolitor-stud-tu/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":14,"created_at":"2017-04-12T22:56:16Z","updated_at":"2017-04-14T01:46:43Z","closed_at":null,"body":"Well, I did some research and found this good documentation on webrtc on iOS:\r\nhttps://tech.appear.in/2015/05/25/Getting-started-with-WebRTC-on-iOS/\r\nand:\r\nhttps://www.html5rocks.com/en/tutorials/webrtc/infrastructure/\r\n\r\nfor signalling jingle could be used (this is used by monal, too)...for an \r\nimplementation combining jingle and webrtc you could port this javascript \r\nlibrary:\r\nhttps://github.com/ESTOS/strophe.jingle\r\n\r\nA list of other javascript jingle/webrtc implementations can be found here:\r\nhttps://github.com/legastero/jingle-interop-demos#jingle-interop-demos\r\n\r\nThe culprit in using jingle for signalling seems to be the translation between \r\nsdp (used by webrtc) and jingle messages...a java implementation could be \r\nfound here (but reading/porting the above javascript implementation should \r\ngive the exact same results):\r\nhttps://github.com/tuenti/sdp-to-jingle-java\r\n\r\njingle rtp sessions are defined in XEP-0167:\r\nhttps://xmpp.org/extensions/xep-0167.html\r\n\r\nif you want to provide a native look and feel for (incoming) calls you could \r\nalso use this:\r\nhttps://developer.apple.com/reference/callkit\r\n\r\n\r\nI hope this info is helpful.\r\nIf you give me a starting point by implementing a basic webrtc gui, I can work \r\nout the rest (sdp to jingle translation and jingle session negotiation) \r\nIs some sort of jingle (maybe for filetransfer) already implemented in \r\nchatsecure, btw?"},"comment":{"url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/comments/294065139","html_url":"https://github.com/ChatSecure/ChatSecure-iOS/issues/738#issuecomment-294065139","issue_url":"https://api.github.com/repos/ChatSecure/ChatSecure-iOS/issues/738","id":294065139,"user":{"login":"tmolitor-stud-tu","id":6234248,"avatar_url":"https://avatars3.githubusercontent.com/u/6234248?v=3","gravatar_id":"","url":"https://api.github.com/users/tmolitor-stud-tu","html_url":"https://github.com/tmolitor-stud-tu","followers_url":"https://api.github.com/users/tmolitor-stud-tu/followers","following_url":"https://api.github.com/users/tmolitor-stud-tu/following{/other_user}","gists_url":"https://api.github.com/users/tmolitor-stud-tu/gists{/gist_id}","starred_url":"https://api.github.com/users/tmolitor-stud-tu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmolitor-stud-tu/subscriptions","organizations_url":"https://api.github.com/users/tmolitor-stud-tu/orgs","repos_url":"https://api.github.com/users/tmolitor-stud-tu/repos","events_url":"https://api.github.com/users/tmolitor-stud-tu/events{/privacy}","received_events_url":"https://api.github.com/users/tmolitor-stud-tu/received_events","type":"User","site_admin":false},"created_at":"2017-04-14T01:46:43Z","updated_at":"2017-04-14T01:46:43Z","body":"@afriedmanGlacier Well, better than nothing I guess :)\r\n\r\n@chrisballinger I did some more research on the signalling part:\r\nI found this serverless WebRTC videochat project:\r\nhttp://blog.printf.net/articles/2013/05/17/webrtc-without-a-signaling-server/\r\nhttps://github.com/cjb/serverless-webrtc\r\n(just for reference: https://github.com/wojta/serverless-webrtc-android)\r\n\r\nThe signalling part is done by copy 'n paste of text snippets containing SDP the offer and response.\r\nThese offer snippet is about _6 KiB_ in size, **that's really big for an xmpp message**.\r\nThe linked serverless application uses a data channel which consumes _~1 KiB_ in the sdp offer and is not needed for us. The SDP response is smaller (only _~2 KiB_ in size).\r\n\r\nI tried to compress the offer with `gzip --best`, but this still gives us about _1.4 KiB_ size.\r\nUrlencoding this compressed data gives us _~3.4 KiB_.\r\nBase64 encoding the compressed data gives us only _~1.8 KiB_.\r\nUrlencoding the Base64 encoded compressed data gives us _~ 2 KiB_.\r\n**--> I'd go with compressing, base64 encoding and ulencoding the SDP offer and response.**\r\n\r\n**Sidenote 1:** My laptop has more IP addresses than a normal mobile phone, that could reduce the size of the encoded and compressed SDP offer to _~ 1.5 KiB_ on a mobile phone.\r\n\r\n**Sidenote 2:** Using another compression algorithm could reduce the size further (7zip etc.)\r\n\r\n**Example webrtc URI which would be sent as xmpp message:**\r\n_webrtc://eNq1mG1v2zYQx9%2FvUwh5OUz28Xh8HPzCjputQFsYTdq9KVDQEtUYjR9gKWm2IN99J9tLrLRWFk9DgkQSeUfyxP%2Fdj7o7qf5cxRN%2FsiyKuD755aTMV3x3M4BP60%2BL5WC%2B%2FGt2dRV6vd7F76%2FPP%2FPv%2BXgyfH8xTEn1bA8StEBOkwQprUOtnYYEktfvktcTSqC3%2BaldlYO0%2FlcNuLm%2BCIMyLvJ1zG62d8Vs8SWuV%2BvZovLlZUhR6YSUH5I%2FUx5Gfjj2duTHQ69OPY796ZkfnnplvB75s5EX6M%2BMd8oL8q9O%2FdnYj7RX4M%2BkH8q61Y09aT%2Fiv6PaD1qPZjvwl%2FXyeuVHH96N37xKePVhXYXP8HAlHq5w23%2BWxXS5qmbLRemr9Sz7ehW3DfNylqdlnIdFNcv8H2%2FPk5%2FrhvkgXOezZaJQKJN8GE%2F6F2%2FO%2B%2B8vJv3z4cfJWSLAJY5DZuvO2WAXOeGwJ7TtCdmTW%2FdZWOSzPFTRQyJqPwkK5G5ktWx0343E7zW5XJbVU2vcs1ZSaDKP1gA9kRApoQ%2Ba05651miES4SpzXsWa2NjjThorPfHdkbYx5mTZGtlHcBBa7tnbdCiUo8z52WTITq8bLEXtdoB8TSLHMB7Aun8NBa8Nh2Fd6LgEGoDeNjXfgydY3u38zXNpsqTkoodYvTTehRCaw%2FHU9D%2BvKwBMDtfMpFOYovlXjQRlHJS7SxdpqOXPDVvjTPexmzKodWiJTp7sUVUqEjufKGQPtqi8EVE7bOcN5uUDtXh%2FbW%2FPY2Txm0CLbzXeVBeksq9lUieMOTsy6jDbxz3A215hWh2vn40LaesPeiKM1VTNPhENFoStYgGm6LRT0SjjEFqEQ02RWMbolFOO2wRDTZFg03REEpLLaLBpmioIRoNWqo20WBTNNAiGqlJUZtosCka2yYaA4baRINN0ehH0ZC0raLBpmioTTQOhWgTDTZFg4dFo5wg3SYabIoGWkTDYWaPLaLBpmh0i2ikNu6Jq2Zh5pt0WaQP%2Fsvd49tqHlZeJNfrhZ%2FFqvBcJcO89OtqlV6y%2FS3X8XKdpZvql17Fm3j1WEBX33J%2B4xSt1DGynnQuCgDeT5BbOwXMZG4fe18X6%2FDF68iJVOT5rtrOcv9QrR8LsL%2BzU01xSjbVOUJK01ynNhiXuhBACCGzImb3yR1KDqychlQZp1KueTK1sRBpoYwwMQNd5Hi%2F9buuspXf5oeD1bnuk86vb%2F%2B5W22Cw6V9ubou%2B2QBoI%2BNRpf8ZhD7mxbRaIFkcvr2w6al8dzWz4d7z8tYMbqErFqFcvda6pB7i1uNYZItwjz6O8kzQYkyVRxtJrdg0qBAp0EWHHw1FVOQ91tYuZnlcclS1tL9CFYQOsOU7RhHY4oCaCn3z2CKJN1i%2FBymECdCPBpTHIHrCFNkvbE6whQFsj3jHsQUhUZDR5gijZHQDabwBnddYQpxu%2BoGU4iwBcSexxTC%2F4ApXKJBHYspxHhOx2MK5yB9LKYQny1NR5hCQjjsCFMUJwJ1FKbwaUV1hSkEoKAbTGFXQnaEKdJaCR1hisLvNs%2B%2FwpRiXnEd5nnPw21alAMOgbW%2Fbm7WAw3%2FF5GII4hEq2BBFJQGW7iUXAFp0C4ykRR5nhUaIsomkdSpoJ1Iiulm8YuQff3x02R1Nfu%2BJcvmSTFbt6EN9%2Fo4sX0%2Brz9HI2gIrDXamSNwJKx4glmoP7fwAQ9AJuOaSM5PLyY1AXRIIxvnR9OIlOjssTTCOcXY42nEaXE8jWihbFc0whnJdUUjWtnjaESq1mT4Mhpp%2FR71MhpBaPk68TIaUdq1fKF7GY0YKY86%2F3WfM3fHozLbZpha3cm3OOX0k%2FK4IbsMi0W8SlDp9nzDayYgwfvgxfnm5P6nvwHdNJ%2Fw_\r\n"}}
{"actor":{"display_login":"tmolitor-stud-tu"}}