diff --git a/signal/base64.txt b/signal/base64.txt deleted file mode 100644 index 9d2b5f9..0000000 --- a/signal/base64.txt +++ /dev/null @@ -1 +0,0 @@ -eyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJ2PTBcclxubz0tIDczODg4OTkxNjA0NjExMjA3NSAyIElOIElQNCAxMjcuMC4wLjFcclxucz0tXHJcbnQ9MCAwXHJcbmE9Z3JvdXA6QlVORExFIDAgMVxyXG5hPWV4dG1hcC1hbGxvdy1taXhlZFxyXG5hPW1zaWQtc2VtYW50aWM6IFdNUyAxZjQ5MTlkNi01OGRhLTRhYWUtYmVkOS03YmI0NDlmNTg4ZmFcclxubT1hdWRpbyA0NjM5NSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgNjMgOSAwIDggMTMgMTEwIDEyNlxyXG5jPUlOIElQNCAxMDIuOTEuNDYuMTNcclxuYT1ydGNwOjkgSU4gSVA0IDAuMC4wLjBcclxuYT1jYW5kaWRhdGU6MjQ2Nzk1ODc3MCAxIHVkcCAyMTIyMjYwMjIzIDE5Mi4xNjguNTYuMSA0OTM4NCB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAyXHJcbmE9Y2FuZGlkYXRlOjM5OTA4MTg0MzMgMSB1ZHAgMjEyMjE5NDY4NyAxNzIuMjUuNDguMSA0OTM4NSB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAzXHJcbmE9Y2FuZGlkYXRlOjI0MTcwMjg5NDUgMSB1ZHAgMjEyMjEyOTE1MSAxNzIuMjAuMTAuNCA0OTM4NiB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAxIG5ldHdvcmstY29zdCAxMFxyXG5hPWNhbmRpZGF0ZTozOTkwMjIwMTM4IDEgdGNwIDE1MTgyODA0NDcgMTkyLjE2OC41Ni4xIDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUgZ2VuZXJhdGlvbiAwIG5ldHdvcmstaWQgMlxyXG5hPWNhbmRpZGF0ZToyNDY3MzU5NzY5IDEgdGNwIDE1MTgyMTQ5MTEgMTcyLjI1LjQ4LjEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZSBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAzXHJcbmE9Y2FuZGlkYXRlOjQwMDc1OTU0NjUgMSB0Y3AgMTUxODE0OTM3NSAxNzIuMjAuMTAuNCA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlIGdlbmVyYXRpb24gMCBuZXR3b3JrLWlkIDEgbmV0d29yay1jb3N0IDEwXHJcbmE9Y2FuZGlkYXRlOjY4NzQzNzk0NyAxIHVkcCAxNjg1OTIxNTM1IDEwMi45MS40Ni4xMyA0NjM5NSB0eXAgc3JmbHggcmFkZHIgMTcyLjIwLjEwLjQgcnBvcnQgNDkzODYgZ2VuZXJhdGlvbiAwIG5ldHdvcmstaWQgMSBuZXR3b3JrLWNvc3QgMTBcclxuYT1pY2UtdWZyYWc6RXo1TlxyXG5hPWljZS1wd2Q6dVQ5a3hZMEpDWkJ4NkVmUHRIQTE1WTV5XHJcbmE9aWNlLW9wdGlvbnM6dHJpY2tsZVxyXG5hPWZpbmdlcnByaW50OnNoYS0yNTYgOEE6RkE6N0I6OTE6Q0Y6RTU6NTQ6ODc6QjQ6MjU6MDk6QjU6ODk6QjY6QUY6MTk6RTA6M0M6QUQ6Qzk6NTE6MTM6OUQ6Q0Q6MEE6MkM6QkY6NDU6REY6NDA6RTY6QkVcclxuYT1zZXR1cDphY3RwYXNzXHJcbmE9bWlkOjBcclxuYT1leHRtYXA6MSB1cm46aWV0ZjpwYXJhbXM6cnRwLWhkcmV4dDpzc3JjLWF1ZGlvLWxldmVsXHJcbmE9ZXh0bWFwOjIgaHR0cDovL3d3dy53ZWJydGMub3JnL2V4cGVyaW1lbnRzL3J0cC1oZHJleHQvYWJzLXNlbmQtdGltZVxyXG5hPWV4dG1hcDozIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0LXRyYW5zcG9ydC13aWRlLWNjLWV4dGVuc2lvbnMtMDFcclxuYT1leHRtYXA6NCB1cm46aWV0ZjpwYXJhbXM6cnRwLWhkcmV4dDpzZGVzOm1pZFxyXG5hPXNlbmRyZWN2XHJcbmE9bXNpZDoxZjQ5MTlkNi01OGRhLTRhYWUtYmVkOS03YmI0NDlmNTg4ZmEgMTQzNGQxZjAtNjY4Zi00MDE2LWE4MzMtMjJhYjVjNjUyZjg3XHJcbmE9cnRjcC1tdXhcclxuYT1ydHBtYXA6MTExIG9wdXMvNDgwMDAvMlxyXG5hPXJ0Y3AtZmI6MTExIHRyYW5zcG9ydC1jY1xyXG5hPWZtdHA6MTExIG1pbnB0aW1lPTEwO3VzZWluYmFuZGZlYz0xXHJcbmE9cnRwbWFwOjYzIHJlZC80ODAwMC8yXHJcbmE9Zm10cDo2MyAxMTEvMTExXHJcbmE9cnRwbWFwOjkgRzcyMi84MDAwXHJcbmE9cnRwbWFwOjAgUENNVS84MDAwXHJcbmE9cnRwbWFwOjggUENNQS84MDAwXHJcbmE9cnRwbWFwOjEzIENOLzgwMDBcclxuYT1ydHBtYXA6MTEwIHRlbGVwaG9uZS1ldmVudC80ODAwMFxyXG5hPXJ0cG1hcDoxMjYgdGVsZXBob25lLWV2ZW50LzgwMDBcclxuYT1zc3JjOjMzODA4Mjk3MzQgY25hbWU6dkZ2S2UzdU5XUThqYytjL1xyXG5hPXNzcmM6MzM4MDgyOTczNCBtc2lkOjFmNDkxOWQ2LTU4ZGEtNGFhZS1iZWQ5LTdiYjQ0OWY1ODhmYSAxNDM0ZDFmMC02NjhmLTQwMTYtYTgzMy0yMmFiNWM2NTJmODdcclxubT12aWRlbyAzMzY0MCBVRFAvVExTL1JUUC9TQVZQRiA5NiA5NyAxMDIgMTAzIDEwNCAxMDUgMTA2IDEwNyAxMDggMTA5IDEyNyAxMjUgMzkgNDAgNDUgNDYgOTggOTkgMTAwIDEwMSAxMTIgMTEzIDExNiAxMTcgMTE4XHJcbmM9SU4gSVA0IDEwMi45MS40Ny4xMzNcclxuYT1ydGNwOjkgSU4gSVA0IDAuMC4wLjBcclxuYT1jYW5kaWRhdGU6MjQ2Nzk1ODc3MCAxIHVkcCAyMTIyMjYwMjIzIDE5Mi4xNjguNTYuMSA0OTM4NyB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAyXHJcbmE9Y2FuZGlkYXRlOjM5OTA4MTg0MzMgMSB1ZHAgMjEyMjE5NDY4NyAxNzIuMjUuNDguMSA0OTM4OCB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAzXHJcbmE9Y2FuZGlkYXRlOjI0MTcwMjg5NDUgMSB1ZHAgMjEyMjEyOTE1MSAxNzIuMjAuMTAuNCA0OTM4OSB0eXAgaG9zdCBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAxIG5ldHdvcmstY29zdCAxMFxyXG5hPWNhbmRpZGF0ZTozOTkwMjIwMTM4IDEgdGNwIDE1MTgyODA0NDcgMTkyLjE2OC41Ni4xIDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUgZ2VuZXJhdGlvbiAwIG5ldHdvcmstaWQgMlxyXG5hPWNhbmRpZGF0ZToyNDY3MzU5NzY5IDEgdGNwIDE1MTgyMTQ5MTEgMTcyLjI1LjQ4LjEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZSBnZW5lcmF0aW9uIDAgbmV0d29yay1pZCAzXHJcbmE9Y2FuZGlkYXRlOjQwMDc1OTU0NjUgMSB0Y3AgMTUxODE0OTM3NSAxNzIuMjAuMTAuNCA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlIGdlbmVyYXRpb24gMCBuZXR3b3JrLWlkIDEgbmV0d29yay1jb3N0IDEwXHJcbmE9Y2FuZGlkYXRlOjY4NzQzNzk0NyAxIHVkcCAxNjg1OTIxNTM1IDEwMi45MS40Ny4xMzMgMzM2NDAgdHlwIHNyZmx4IHJhZGRyIDE3Mi4yMC4xMC40IHJwb3J0IDQ5Mzg5IGdlbmVyYXRpb24gMCBuZXR3b3JrLWlkIDEgbmV0d29yay1jb3N0IDEwXHJcbmE9aWNlLXVmcmFnOkV6NU5cclxuYT1pY2UtcHdkOnVUOWt4WTBKQ1pCeDZFZlB0SEExNVk1eVxyXG5hPWljZS1vcHRpb25zOnRyaWNrbGVcclxuYT1maW5nZXJwcmludDpzaGEtMjU2IDhBOkZBOjdCOjkxOkNGOkU1OjU0Ojg3OkI0OjI1OjA5OkI1Ojg5OkI2OkFGOjE5OkUwOjNDOkFEOkM5OjUxOjEzOjlEOkNEOjBBOjJDOkJGOjQ1OkRGOjQwOkU2OkJFXHJcbmE9c2V0dXA6YWN0cGFzc1xyXG5hPW1pZDoxXHJcbmE9ZXh0bWFwOjE0IHVybjppZXRmOnBhcmFtczpydHAtaGRyZXh0OnRvZmZzZXRcclxuYT1leHRtYXA6MiBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvZXhwZXJpbWVudHMvcnRwLWhkcmV4dC9hYnMtc2VuZC10aW1lXHJcbmE9ZXh0bWFwOjEzIHVybjozZ3BwOnZpZGVvLW9yaWVudGF0aW9uXHJcbmE9ZXh0bWFwOjMgaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1ob2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMVxyXG5hPWV4dG1hcDo1IGh0dHA6Ly93d3cud2VicnRjLm9yZy9leHBlcmltZW50cy9ydHAtaGRyZXh0L3BsYXlvdXQtZGVsYXlcclxuYT1leHRtYXA6NiBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvZXhwZXJpbWVudHMvcnRwLWhkcmV4dC92aWRlby1jb250ZW50LXR5cGVcclxuYT1leHRtYXA6NyBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvZXhwZXJpbWVudHMvcnRwLWhkcmV4dC92aWRlby10aW1pbmdcclxuYT1leHRtYXA6OCBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvZXhwZXJpbWVudHMvcnRwLWhkcmV4dC9jb2xvci1zcGFjZVxyXG5hPWV4dG1hcDo0IHVybjppZXRmOnBhcmFtczpydHAtaGRyZXh0OnNkZXM6bWlkXHJcbmE9ZXh0bWFwOjEwIHVybjppZXRmOnBhcmFtczpydHAtaGRyZXh0OnNkZXM6cnRwLXN0cmVhbS1pZFxyXG5hPWV4dG1hcDoxMSB1cm46aWV0ZjpwYXJhbXM6cnRwLWhkcmV4dDpzZGVzOnJlcGFpcmVkLXJ0cC1zdHJlYW0taWRcclxuYT1zZW5kcmVjdlxyXG5hPW1zaWQ6MWY0OTE5ZDYtNThkYS00YWFlLWJlZDktN2JiNDQ5ZjU4OGZhIDI5NGJiYmUyLTYwNmYtNGI5OC1hZGUwLTg1OWM0NWM0NWE0MFxyXG5hPXJ0Y3AtbXV4XHJcbmE9cnRjcC1yc2l6ZVxyXG5hPXJ0cG1hcDo5NiBWUDgvOTAwMDBcclxuYT1ydGNwLWZiOjk2IGdvb2ctcmVtYlxyXG5hPXJ0Y3AtZmI6OTYgdHJhbnNwb3J0LWNjXHJcbmE9cnRjcC1mYjo5NiBjY20gZmlyXHJcbmE9cnRjcC1mYjo5NiBuYWNrXHJcbmE9cnRjcC1mYjo5NiBuYWNrIHBsaVxyXG5hPXJ0cG1hcDo5NyBydHgvOTAwMDBcclxuYT1mbXRwOjk3IGFwdD05NlxyXG5hPXJ0cG1hcDoxMDIgSDI2NC85MDAwMFxyXG5hPXJ0Y3AtZmI6MTAyIGdvb2ctcmVtYlxyXG5hPXJ0Y3AtZmI6MTAyIHRyYW5zcG9ydC1jY1xyXG5hPXJ0Y3AtZmI6MTAyIGNjbSBmaXJcclxuYT1ydGNwLWZiOjEwMiBuYWNrXHJcbmE9cnRjcC1mYjoxMDIgbmFjayBwbGlcclxuYT1mbXRwOjEwMiBsZXZlbC1hc3ltbWV0cnktYWxsb3dlZD0xO3BhY2tldGl6YXRpb24tbW9kZT0xO3Byb2ZpbGUtbGV2ZWwtaWQ9NDIwMDFmXHJcbmE9cnRwbWFwOjEwMyBydHgvOTAwMDBcclxuYT1mbXRwOjEwMyBhcHQ9MTAyXHJcbmE9cnRwbWFwOjEwNCBIMjY0LzkwMDAwXHJcbmE9cnRjcC1mYjoxMDQgZ29vZy1yZW1iXHJcbmE9cnRjcC1mYjoxMDQgdHJhbnNwb3J0LWNjXHJcbmE9cnRjcC1mYjoxMDQgY2NtIGZpclxyXG5hPXJ0Y3AtZmI6MTA0IG5hY2tcclxuYT1ydGNwLWZiOjEwNCBuYWNrIHBsaVxyXG5hPWZtdHA6MTA0IGxldmVsLWFzeW1tZXRyeS1hbGxvd2VkPTE7cGFja2V0aXphdGlvbi1tb2RlPTA7cHJvZmlsZS1sZXZlbC1pZD00MjAwMWZcclxuYT1ydHBtYXA6MTA1IHJ0eC85MDAwMFxyXG5hPWZtdHA6MTA1IGFwdD0xMDRcclxuYT1ydHBtYXA6MTA2IEgyNjQvOTAwMDBcclxuYT1ydGNwLWZiOjEwNiBnb29nLXJlbWJcclxuYT1ydGNwLWZiOjEwNiB0cmFuc3BvcnQtY2NcclxuYT1ydGNwLWZiOjEwNiBjY20gZmlyXHJcbmE9cnRjcC1mYjoxMDYgbmFja1xyXG5hPXJ0Y3AtZmI6MTA2IG5hY2sgcGxpXHJcbmE9Zm10cDoxMDYgbGV2ZWwtYXN5bW1ldHJ5LWFsbG93ZWQ9MTtwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxldmVsLWlkPTQyZTAxZlxyXG5hPXJ0cG1hcDoxMDcgcnR4LzkwMDAwXHJcbmE9Zm10cDoxMDcgYXB0PTEwNlxyXG5hPXJ0cG1hcDoxMDggSDI2NC85MDAwMFxyXG5hPXJ0Y3AtZmI6MTA4IGdvb2ctcmVtYlxyXG5hPXJ0Y3AtZmI6MTA4IHRyYW5zcG9ydC1jY1xyXG5hPXJ0Y3AtZmI6MTA4IGNjbSBmaXJcclxuYT1ydGNwLWZiOjEwOCBuYWNrXHJcbmE9cnRjcC1mYjoxMDggbmFjayBwbGlcclxuYT1mbXRwOjEwOCBsZXZlbC1hc3ltbWV0cnktYWxsb3dlZD0xO3BhY2tldGl6YXRpb24tbW9kZT0wO3Byb2ZpbGUtbGV2ZWwtaWQ9NDJlMDFmXHJcbmE9cnRwbWFwOjEwOSBydHgvOTAwMDBcclxuYT1mbXRwOjEwOSBhcHQ9MTA4XHJcbmE9cnRwbWFwOjEyNyBIMjY0LzkwMDAwXHJcbmE9cnRjcC1mYjoxMjcgZ29vZy1yZW1iXHJcbmE9cnRjcC1mYjoxMjcgdHJhbnNwb3J0LWNjXHJcbmE9cnRjcC1mYjoxMjcgY2NtIGZpclxyXG5hPXJ0Y3AtZmI6MTI3IG5hY2tcclxuYT1ydGNwLWZiOjEyNyBuYWNrIHBsaVxyXG5hPWZtdHA6MTI3IGxldmVsLWFzeW1tZXRyeS1hbGxvd2VkPTE7cGFja2V0aXphdGlvbi1tb2RlPTE7cHJvZmlsZS1sZXZlbC1pZD00ZDAwMWZcclxuYT1ydHBtYXA6MTI1IHJ0eC85MDAwMFxyXG5hPWZtdHA6MTI1IGFwdD0xMjdcclxuYT1ydHBtYXA6MzkgSDI2NC85MDAwMFxyXG5hPXJ0Y3AtZmI6MzkgZ29vZy1yZW1iXHJcbmE9cnRjcC1mYjozOSB0cmFuc3BvcnQtY2NcclxuYT1ydGNwLWZiOjM5IGNjbSBmaXJcclxuYT1ydGNwLWZiOjM5IG5hY2tcclxuYT1ydGNwLWZiOjM5IG5hY2sgcGxpXHJcbmE9Zm10cDozOSBsZXZlbC1hc3ltbWV0cnktYWxsb3dlZD0xO3BhY2tldGl6YXRpb24tbW9kZT0wO3Byb2ZpbGUtbGV2ZWwtaWQ9NGQwMDFmXHJcbmE9cnRwbWFwOjQwIHJ0eC85MDAwMFxyXG5hPWZtdHA6NDAgYXB0PTM5XHJcbmE9cnRwbWFwOjQ1IEFWMS85MDAwMFxyXG5hPXJ0Y3AtZmI6NDUgZ29vZy1yZW1iXHJcbmE9cnRjcC1mYjo0NSB0cmFuc3BvcnQtY2NcclxuYT1ydGNwLWZiOjQ1IGNjbSBmaXJcclxuYT1ydGNwLWZiOjQ1IG5hY2tcclxuYT1ydGNwLWZiOjQ1IG5hY2sgcGxpXHJcbmE9cnRwbWFwOjQ2IHJ0eC85MDAwMFxyXG5hPWZtdHA6NDYgYXB0PTQ1XHJcbmE9cnRwbWFwOjk4IFZQOS85MDAwMFxyXG5hPXJ0Y3AtZmI6OTggZ29vZy1yZW1iXHJcbmE9cnRjcC1mYjo5OCB0cmFuc3BvcnQtY2NcclxuYT1ydGNwLWZiOjk4IGNjbSBmaXJcclxuYT1ydGNwLWZiOjk4IG5hY2tcclxuYT1ydGNwLWZiOjk4IG5hY2sgcGxpXHJcbmE9Zm10cDo5OCBwcm9maWxlLWlkPTBcclxuYT1ydHBtYXA6OTkgcnR4LzkwMDAwXHJcbmE9Zm10cDo5OSBhcHQ9OThcclxuYT1ydHBtYXA6MTAwIFZQOS85MDAwMFxyXG5hPXJ0Y3AtZmI6MTAwIGdvb2ctcmVtYlxyXG5hPXJ0Y3AtZmI6MTAwIHRyYW5zcG9ydC1jY1xyXG5hPXJ0Y3AtZmI6MTAwIGNjbSBmaXJcclxuYT1ydGNwLWZiOjEwMCBuYWNrXHJcbmE9cnRjcC1mYjoxMDAgbmFjayBwbGlcclxuYT1mbXRwOjEwMCBwcm9maWxlLWlkPTJcclxuYT1ydHBtYXA6MTAxIHJ0eC85MDAwMFxyXG5hPWZtdHA6MTAxIGFwdD0xMDBcclxuYT1ydHBtYXA6MTEyIEgyNjQvOTAwMDBcclxuYT1ydGNwLWZiOjExMiBnb29nLXJlbWJcclxuYT1ydGNwLWZiOjExMiB0cmFuc3BvcnQtY2NcclxuYT1ydGNwLWZiOjExMiBjY20gZmlyXHJcbmE9cnRjcC1mYjoxMTIgbmFja1xyXG5hPXJ0Y3AtZmI6MTEyIG5hY2sgcGxpXHJcbmE9Zm10cDoxMTIgbGV2ZWwtYXN5bW1ldHJ5LWFsbG93ZWQ9MTtwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxldmVsLWlkPTY0MDAxZlxyXG5hPXJ0cG1hcDoxMTMgcnR4LzkwMDAwXHJcbmE9Zm10cDoxMTMgYXB0PTExMlxyXG5hPXJ0cG1hcDoxMTYgcmVkLzkwMDAwXHJcbmE9cnRwbWFwOjExNyBydHgvOTAwMDBcclxuYT1mbXRwOjExNyBhcHQ9MTE2XHJcbmE9cnRwbWFwOjExOCB1bHBmZWMvOTAwMDBcclxuYT1zc3JjLWdyb3VwOkZJRCAzNzg4NjgwMjcxIDE0Mjg2ODYxNzJcclxuYT1zc3JjOjM3ODg2ODAyNzEgY25hbWU6dkZ2S2UzdU5XUThqYytjL1xyXG5hPXNzcmM6Mzc4ODY4MDI3MSBtc2lkOjFmNDkxOWQ2LTU4ZGEtNGFhZS1iZWQ5LTdiYjQ0OWY1ODhmYSAyOTRiYmJlMi02MDZmLTRiOTgtYWRlMC04NTljNDVjNDVhNDBcclxuYT1zc3JjOjE0Mjg2ODYxNzIgY25hbWU6dkZ2S2UzdU5XUThqYytjL1xyXG5hPXNzcmM6MTQyODY4NjE3MiBtc2lkOjFmNDkxOWQ2LTU4ZGEtNGFhZS1iZWQ5LTdiYjQ0OWY1ODhmYSAyOTRiYmJlMi02MDZmLTRiOTgtYWRlMC04NTljNDVjNDVhNDBcclxuIn0= \ No newline at end of file diff --git a/signal/http.go b/signal/http.go deleted file mode 100644 index 4f81afe..0000000 --- a/signal/http.go +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -package signal - -import ( - "fmt" - "io/ioutil" - "net/http" - "strconv" -) - -// HTTPSDPServer starts a HTTP Server that consumes SDPs -func HTTPSDPServer(port int) chan string { - sdpChan := make(chan string) - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - body, _ := ioutil.ReadAll(r.Body) - fmt.Fprintf(w, "done") - sdpChan <- string(body) - }) - - go func() { - // nolint: gosec - err := http.ListenAndServe(":"+strconv.Itoa(port), nil) - if err != nil { - panic(err) - } - }() - - return sdpChan -} diff --git a/signal/rand.go b/signal/rand.go deleted file mode 100644 index c55fc6c..0000000 --- a/signal/rand.go +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -package signal - -import "github.com/pion/randutil" - -// RandSeq generates a random string to serve as dummy data -// -// It returns a deterministic sequence of values each time a program is run. -// Use rand.Seed() function in your real applications. -func RandSeq(n int) string { - val, err := randutil.GenerateCryptoRandomString(n, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - if err != nil { - panic(err) - } - - return val -} diff --git a/signal/signal.go b/signal/signal.go deleted file mode 100644 index dd32f9c..0000000 --- a/signal/signal.go +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -// Package signal contains helpers to exchange the SDP session -// description between examples. -package signal - -import ( - "bufio" - "bytes" - "compress/gzip" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - "strings" -) - -// Allows compressing offer/answer to bypass terminal input limits. -const compress = false - -// MustReadStdin blocks until input is received from stdin -func MustReadStdin() string { - filename := "/home/chigozirim/Documents/my-docs/song-recognition/signal/base64.txt" - file, err := os.Open(filename) - if err != nil { - panic(err) - } - defer file.Close() - - r := bufio.NewReaderSize(file, 16384) - - var in string - for { - var err error - in, err = r.ReadString('\n') - if err != io.EOF { - if err != nil { - panic(err) - } - } - in = strings.TrimSpace(in) - if len(in) > 0 { - break - } - } - - fmt.Println("") - - return in -} - -// Encode encodes the input in base64 -// It can optionally zip the input before encoding -func Encode(obj interface{}) string { - b, err := json.Marshal(obj) - if err != nil { - panic(err) - } - - if compress { - b = zip(b) - } - - return base64.StdEncoding.EncodeToString(b) -} - -// Decode decodes the input from base64 -// It can optionally unzip the input after decoding -func Decode(in string, obj interface{}) { - b, err := base64.StdEncoding.DecodeString(in) - if err != nil { - panic(err) - } - - if compress { - b = unzip(b) - } - - err = json.Unmarshal(b, obj) - if err != nil { - panic(err) - } -} - -func zip(in []byte) []byte { - var b bytes.Buffer - gz := gzip.NewWriter(&b) - _, err := gz.Write(in) - if err != nil { - panic(err) - } - err = gz.Flush() - if err != nil { - panic(err) - } - err = gz.Close() - if err != nil { - panic(err) - } - return b.Bytes() -} - -func unzip(in []byte) []byte { - var b bytes.Buffer - _, err := b.Write(in) - if err != nil { - panic(err) - } - r, err := gzip.NewReader(&b) - if err != nil { - panic(err) - } - res, err := ioutil.ReadAll(r) - if err != nil { - panic(err) - } - return res -} diff --git a/signal/webrtc.go b/signal/webrtc.go deleted file mode 100644 index 86c8a1e..0000000 --- a/signal/webrtc.go +++ /dev/null @@ -1,212 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -//go:build !js -// +build !js - -// save-to-disk is a simple application that shows how to record your webcam/microphone using Pion WebRTC and save VP8/Opus to disk. -package signal - -import ( - "fmt" - "io" - "time" - - "github.com/pion/interceptor" - "github.com/pion/webrtc/v4" - "go.mongodb.org/mongo-driver/bson/primitive" - - "song-recognition/shazam" - - "github.com/pion/webrtc/v4/pkg/media" -) - -func SaveToDisk(i media.Writer, track *webrtc.TrackRemote) { - defer func() { - if err := i.Close(); err != nil { - panic(err) - } - }() - - for { - rtpPacket, _, err := track.ReadRTP() - if err != nil { - fmt.Println(err) - return - } - if err := i.WriteRTP(rtpPacket); err != nil { - fmt.Println(err) - return - } - } -} - -func SaveToBytes(track *webrtc.TrackRemote) ([]byte, error) { - var audioData []byte - - for { - rtpPacket, _, err := track.ReadRTP() - if err != nil { - if err == io.EOF { - break - } - return nil, err - } - - // Extract audio payload from RTP packet - payload := rtpPacket.Payload - - // Append audio payload to audioData - audioData = append(audioData, payload...) - // fmt.Println("ByteArray: ", audioData) - } - - return audioData, nil -} - -func MatchSampleAudio(track *webrtc.TrackRemote) ([]primitive.M, error) { - // Use time.After to stop after 15 seconds - stop := time.After(20 * time.Second) - - // Use a ticker to process sampleAudio every 2 seconds - ticker := time.NewTicker(2 * time.Second) - defer ticker.Stop() - - var sampleAudio []byte - var matches []shazam.Match - - for { - select { - case <-ticker.C: - // Process sampleAudio every 2 seconds - if len(sampleAudio) > 0 { - matchess, err := shazam.FindMatches(sampleAudio) - matches = matchess - if err != nil { - fmt.Println("An Error: ", err) - return nil, nil - } - - // Reset sampleAudio for fresh input - // sampleAudio = nil - - // if len(matches) > 0 { - // fmt.Println("FOUND A MATCH! - ", matches) - // jsonData, err := json.Marshal(matches) - // if err != nil { - // fmt.Println(err) - // return "", nil - // } - // return string(jsonData), nil - // } - } - case <-stop: - // Stop after 15 seconds - fmt.Println("Stopped after 15 seconds") - var matchesChunkTags []primitive.M - for _, match := range matches { - matchesChunkTags = append(matchesChunkTags, match.ChunkTag) - } - return matchesChunkTags, nil - - default: - // Read RTP packets and accumulate sampleAudio - rtpPacket, _, err := track.ReadRTP() - if err != nil { - if err != io.EOF { - return nil, fmt.Errorf("error reading RTP packet: %d", err) - } - return nil, err - } - - // Extract audio payload from RTP packet - payload := rtpPacket.Payload - - sampleAudio = append(sampleAudio, payload...) - } - } -} - -// nolint:gocognit -func SetupWebRTC(encodedOffer string) *webrtc.PeerConnection { - // Everything below is the Pion WebRTC API! Thanks for using it ❤️. - - // Create a MediaEngine object to configure the supported codec - m := &webrtc.MediaEngine{} - - // Setup the codecs you want to use. - // We'll use Opus, but you can also define your own - if err := m.RegisterCodec(webrtc.RTPCodecParameters{ - RTPCodecCapability: webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeOpus, ClockRate: 48000, Channels: 1, SDPFmtpLine: "", RTCPFeedback: nil}, - PayloadType: 111, - }, webrtc.RTPCodecTypeAudio); err != nil { - panic(err) - } - - // Create a InterceptorRegistry. This is the user configurable RTP/RTCP Pipeline. - // This provides NACKs, RTCP Reports and other features. - i := &interceptor.Registry{} - - // Register a intervalpli factory - // This interceptor sends a PLI every 3 seconds. A PLI causes a keyframe to be generated by the sender. - // intervalPliFactory, err := intervalpli.NewReceiverInterceptor() - // if err != nil { - // panic(err) - // } - // i.Add(intervalPliFactory) - - // // Use the default set of Interceptors - // if err = webrtc.RegisterDefaultInterceptors(m, i); err != nil { - // panic(err) - // } - - // Create the API object with the MediaEngine - api := webrtc.NewAPI(webrtc.WithMediaEngine(m), webrtc.WithInterceptorRegistry(i)) - - // Prepare the configuration - config := webrtc.Configuration{ - ICEServers: []webrtc.ICEServer{ - { - URLs: []string{"stun:stun.l.google.com:19302"}, - }, - }, - } - - // Create a new RTCPeerConnection - peerConnection, err := api.NewPeerConnection(config) - if err != nil { - panic(err) - } - - // Wait for the offer to be pasted - offer := webrtc.SessionDescription{} - Decode(encodedOffer, &offer) - - // Set the remote SessionDescription - err = peerConnection.SetRemoteDescription(offer) - if err != nil { - panic(err) - } - - // Create answer - answer, err := peerConnection.CreateAnswer(nil) - if err != nil { - panic(err) - } - - // Create channel that is blocked until ICE Gathering is complete - gatherComplete := webrtc.GatheringCompletePromise(peerConnection) - - // Sets the LocalDescription, and starts our UDP listeners - err = peerConnection.SetLocalDescription(answer) - if err != nil { - panic(err) - } - - // Block until ICE Gathering is complete, disabling trickle ICE - // we do this because we only can exchange one signaling message - // in a production application you should exchange ICE Candidates via OnICECandidate - <-gatherComplete - - return peerConnection -}