Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: jetson: timestamp of h264 encoded frame is 90kHz #137

Merged
merged 1 commit into from
Mar 9, 2020

Conversation

tetsu-koba
Copy link
Contributor

jetson nanoでビデオのタイムスタンプの単位がSDPで申告した値と異なる。

SDPでは H264/90000 となっているので、H264のRTPパケットのタイムスタンプは 90kHz であるべきなのに、実際には1kHz の値が入っている。

@voluntas voluntas requested review from melpon and voluntas March 7, 2020 08:01
@tetsu-koba
Copy link
Contributor Author

momoの起動ログでSDPを確認すると、以下のように a=rtpmap:120 H264/90000 となっている。

[001:248] [1483] (websocket.cpp:94): doSendText: {"sdp":"v=0\r\no=- 328944118198587861 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio_pGybts video_Q6zTER\r\na=msid-semantic: WMS jjRH/V/pWoqgZMG1sugIi1Oosa8X/NSm\r\nm=audio 9 UDP/TLS/RTP/SAVPF 109\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:F8L3\r\na=ice-pwd:jSmGRkGXZ8nPVcjk8fvXglyP\r\na=ice-options:trickle\r\na=fingerprint:sha-256 6F:79:69:1E:C0:47:38:BB:54:C3:C1:42:B6:21:D8:DD:82:8A:06:6F:07:BC:CC:74:DA:B6:20:D5:25:00:41:30\r\na=setup:active\r\na=mid:audio_pGybts\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:14 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendonly\r\na=msid:jjRH/V/pWoqgZMG1sugIi1Oosa8X/NSm 5z79ES1OW9VD4/M82VicBe4J2vRpmb2y\r\na=rtcp-mux\r\na=rtpmap:109 opus/48000/2\r\na=fmtp:109 minptime=10;useinbandfec=1\r\na=ssrc:1337946138 cname:C+je9n/iVQa3cewx\r\nm=video 9 UDP/TLS/RTP/SAVPF 120 116 117 96 97\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:F8L3\r\na=ice-pwd:jSmGRkGXZ8nPVcjk8fvXglyP\r\na=ice-options:trickle\r\na=fingerprint:sha-256 6F:79:69:1E:C0:47:38:BB:54:C3:C1:42:B6:21:D8:DD:82:8A:06:6F:07:BC:CC:74:DA:B6:20:D5:25:00:41:30\r\na=setup:active\r\na=mid:video_Q6zTER\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:14 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendonly\r\na=msid:jjRH/V/pWoqgZMG1sugIi1Oosa8X/NSm 1/p+VjdNnudVk4C6XzWr/sE4xRnl5GoR\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:120 H264/90000\r\na=rtcp-fb:120 goog-remb\r\na=rtcp-fb:120 ccm fir\r\na=rtcp-fb:120 nack\r\na=rtcp-fb:120 nack pli\r\na=fmtp:120 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:116 red/90000\r\na=rtpmap:117 ulpfec/90000\r\na=rtpmap:96 rtx/90000\r\na=fmtp:96 apt=120\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=116\r\na=ssrc-group:FID 1341976310 32501663\r\na=ssrc:1341976310 cname:C+je9n/iVQa3cewx\r\na=ssrc:32501663 cname:C+je9n/iVQa3cewx\r\n","type":"answer"}

@voluntas voluntas requested a review from tnoho March 8, 2020 05:56
@voluntas voluntas self-assigned this Mar 8, 2020
@voluntas voluntas added the バグ label Mar 8, 2020
@tnoho
Copy link
Contributor

tnoho commented Mar 9, 2020

周辺含め確認したのですが Jetson に関してはそこで 90 を掛けるので問題なさそうです。

libvpx 系については入力前にタイムスタンプに 90 を掛けているのでエンコーダで 90 掛けてしまうこと自体は問題なさそうでした。 Jetson, Raspberry Pi ともにエンコーダへの入力は 90kHz ではないので位置的にはその場所になるかと思います。

ただ Raspberry Pi でも同様の修正が必要でないと整合性が取れないのですが。。。

@tetsu-koba
Copy link
Contributor Author

手元にwebrtcのソースを広げていないので推測になりますが ...

Encode関数の引数で渡される webrtc::VideoFrame& input_frame から
jetsonでは input_frame.timestamp_us() で時刻を取得していますが、
mmalとnvenc ではinput_frame.timestamp() で時刻を取得しているという違いがあります。後者のほうは90kHzでの値が得られるとすれば辻褄が合うのですがどうでしょうか。

@tnoho
Copy link
Contributor

tnoho commented Mar 9, 2020

https://cs.chromium.org/chromium/src/third_party/webrtc/video/video_stream_encoder.cc?g=0&l=756

ありがとうございます。そして当たりです。
そうすると両方直さないといけないのでちょっと時間をください。 RaspberryPi も Jetson も直さないといけないです。

@tnoho tnoho merged commit b13e588 into shiguredo:develop Mar 9, 2020
@tnoho
Copy link
Contributor

tnoho commented Mar 9, 2020

一旦マージします。ありがとうございました!

@tnoho
Copy link
Contributor

tnoho commented Mar 9, 2020

@tetsu-koba b02ea79 で適切に処理されるように修正しました。お手隙な時にでも、また検証いただけると嬉しく思います。ありがとうございました。

nkkn1446 pushed a commit to nkkn1446/momo that referenced this pull request Oct 21, 2022
Fix: jetson: timestamp of h264 encoded frame is 90kHz
nkkn1446 pushed a commit to nkkn1446/momo that referenced this pull request Oct 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants