Skip to content

Commit 2cdb86c

Browse files
committed
fix rtmp url parser
1 parent 4c0b6c9 commit 2cdb86c

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

common/src/main/java/com/pedro/common/UrlParser.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ class UrlParser private constructor(
6767
}
6868

6969
fun getAppName(): String {
70-
val app = path.ifEmpty { query ?: "" }
71-
val indexes = app.getIndexes('/')
72-
return when (indexes.size) {
73-
0 -> app
74-
1 -> app.substring(0, indexes[0])
75-
else -> app.substring(0, indexes[1])
70+
val queries = getAllQueries().map { (key, value) -> "$key=$value" }.joinToString("&")
71+
val path = getFullPath().ifEmpty { query ?: "" }.replace(queries, "")
72+
val segments = path.split('/').filter { it.isNotEmpty() }
73+
return when(segments.size) {
74+
1, 2 -> segments[0]
75+
else -> segments.subList(0, 2).joinToString("/")
7676
}
7777
}
7878

@@ -95,7 +95,7 @@ class UrlParser private constructor(
9595

9696
private fun getAllQueries(): Map<String, String> {
9797
val queries = query?.split("&") ?: emptyList()
98-
val map = HashMap<String, String>()
98+
val map = LinkedHashMap<String, String>()
9999
queries.forEach { entry ->
100100
val data = entry.split(Pattern.compile("="), 2)
101101
if (data.size == 2) map[data[0]] = data[1]

common/src/test/java/com/pedro/common/UrlParserTest.kt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ class UrlParserTest {
1717
assertEquals("rtmp", urlParser.scheme)
1818
assertEquals("localhost", urlParser.host)
1919
assertEquals(1935, urlParser.port)
20-
assertEquals("live", urlParser.getAppName())
21-
assertEquals("test/fake", urlParser.getStreamName())
22-
assertEquals("rtmp://localhost:1935/live", urlParser.getTcUrl())
20+
assertEquals("live?test", urlParser.getAppName())
21+
assertEquals("fake", urlParser.getStreamName())
22+
assertEquals("rtmp://localhost:1935/live?test", urlParser.getTcUrl())
2323

2424
val url0 = "rtmp://192.168.238.182:1935/live/100044?userId=100044&roomTitle=123123&roomCover=http://192.168.238.182/xxxx.png"
2525
val urlParser0 = UrlParser.parse(url0, arrayOf("rtmp"))
@@ -35,9 +35,9 @@ class UrlParserTest {
3535
assertEquals("rtmp", urlParser1.scheme)
3636
assertEquals("localhost", urlParser1.host)
3737
assertEquals(1935, urlParser1.port)
38-
assertEquals("live", urlParser1.getAppName())
39-
assertEquals("test/fake", urlParser1.getStreamName())
40-
assertEquals("rtmp://localhost:1935/live", urlParser1.getTcUrl())
38+
assertEquals("live?test", urlParser1.getAppName())
39+
assertEquals("fake", urlParser1.getStreamName())
40+
assertEquals("rtmp://localhost:1935/live?test", urlParser1.getTcUrl())
4141
assertEquals("user", urlParser1.getAuthUser())
4242
assertEquals("pass", urlParser1.getAuthPassword())
4343

@@ -103,7 +103,16 @@ class UrlParserTest {
103103
assertEquals("v2/pub", urlParser8.getAppName())
104104
assertEquals("streamName?token", urlParser8.getStreamName())
105105
assertEquals("rtmp://192.168.0.1:1935/v2/pub", urlParser8.getTcUrl())
106-
} catch (e: URISyntaxException) {
106+
107+
val url9 = "rtmp://192.168.0.1:1935/live/test?asd/asd/streamName"
108+
val urlParser9 = UrlParser.parse(url9, arrayOf("rtmp"))
109+
assertEquals("rtmp", urlParser9.scheme)
110+
assertEquals("192.168.0.1", urlParser9.host)
111+
assertEquals(1935, urlParser9.port)
112+
assertEquals("live/test?asd", urlParser9.getAppName())
113+
assertEquals("asd/streamName", urlParser9.getStreamName())
114+
assertEquals("rtmp://192.168.0.1:1935/live/test?asd", urlParser9.getTcUrl())
115+
} catch (_: URISyntaxException) {
107116
assert(false)
108117
}
109118
}

0 commit comments

Comments
 (0)