Skip to content

Commit d23a59f

Browse files
authored
Fix vp8 keyframe detection (#236)
1 parent cdae334 commit d23a59f

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

lib/ex_webrtc/rtp/vp8.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ defmodule ExWebRTC.RTP.VP8 do
1717
# for more information refer to RFC 7741 Sections 4.2 and 4.3
1818

1919
with {:ok, vp8_payload} <- VP8.Payload.parse(rtp_payload),
20-
<<_size0::3, _h::1, _ver::3, p::1, _size1::8, _size2::8, _rest::binary>> <- rtp_payload do
20+
<<_size0::3, _h::1, _ver::3, p::1, _size1::8, _size2::8, _rest::binary>> <-
21+
vp8_payload.payload do
2122
vp8_payload.s == 1 and vp8_payload.pid == 0 and p == 0
2223
else
2324
_err -> false

test/ex_webrtc/rtp/vp8_test.exs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
defmodule ExWebRTC.RTP.VP8Test do
2+
use ExUnit.Case, async: true
3+
4+
alias ExRTP.Packet
5+
alias ExWebRTC.RTP.VP8
6+
7+
@vp8_packet "test/fixtures/rtp/vp8_packet.bin"
8+
9+
test "keyframe?/1" do
10+
# from https://github.com/jech/galene/blob/master/codecs/codecs_test.go
11+
binary1 =
12+
<<0x80, 0xE0, 0x71, 0x3E, 0x5D, 0x6F, 0x3C, 0xC5, 0x75, 0xC, 0x80, 0x96, 0x90, 0x80, 0xB0,
13+
0x4C, 0x90, 0x2, 0x0, 0x9D, 0x1, 0x2A, 0x10, 0x0, 0x10, 0x0, 0x39, 0x3, 0x0, 0x0, 0x1C,
14+
0x22, 0x16, 0x16, 0x22, 0x66, 0x12, 0x20, 0x4, 0x90, 0x40, 0x4E, 0x9E, 0x8D, 0xE9, 0x40,
15+
0xFE, 0xFF, 0xAB, 0x59, 0x72, 0x30, 0xD1, 0xAF, 0xE4, 0x6A, 0x11, 0x3, 0xFD, 0x15, 0xE9,
16+
0x2, 0x2E, 0xDF, 0xD9, 0xD1, 0xB8, 0x0, 0x0>>
17+
18+
{:ok, packet1} = Packet.decode(binary1)
19+
assert VP8.keyframe?(packet1)
20+
21+
binary2 =
22+
<<0x80, 0x6F, 0x61, 0x8F, 0xD5, 0x36, 0xDC, 0x15, 0x1B, 0x4A, 0xB5, 0x29, 0x78, 0x9, 0xA1,
23+
0x93, 0xA0, 0x5B, 0xD8, 0xF1, 0xDE, 0x87, 0x23, 0x5A, 0xB9, 0x19, 0x97, 0xB7, 0xBD, 0xBF,
24+
0xF7, 0x6E, 0xAD, 0x82, 0xC4, 0x70, 0x1C, 0xC9, 0x3A, 0xB4, 0x1F, 0x13, 0x45, 0xB5, 0xF1,
25+
0x0, 0xA5, 0xA5, 0xA9, 0xD0, 0xA5, 0xDF, 0x67, 0x88, 0x26, 0x30, 0x32>>
26+
27+
{:ok, packet2} = Packet.decode(binary2)
28+
assert not VP8.keyframe?(packet2)
29+
30+
# https://github.com/elixir-webrtc/ex_webrtc/issues/234
31+
binary_packet3 = File.read!(@vp8_packet)
32+
packet3 = :erlang.binary_to_term(binary_packet3)
33+
assert not VP8.keyframe?(packet3)
34+
end
35+
end

test/fixtures/rtp/vp8_packet.bin

1.23 KB
Binary file not shown.

0 commit comments

Comments
 (0)