1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

映像通信系の備忘録

Posted at

はじめに

こんにちは、じゅぴです
現在ゲーム大会配信用の低遅延画面共有ソフトウェアを開発しております。
その過程でクソ(ありがたい)システムがあって意味わからんかったのでその備忘録です。

FEC(前方誤り訂正)

前方後円墳みたいな名前してますね(笑)
ようは間違いに気づくためのシステムですね。
簡単な例として通信で文字列HELLOを送るとします
そうすると送信データは

FECなし
48 45 4C 4C 4F
FECあり
48 45 4C 4C 4F A7
といったように冗長データ:A7が入ります。

通信バグのケース

仮に通信中にノイズが入り0x45から0x47に1ビット変わってしまうと
FECなしでは

48 47 4C 4C 4F

となり、「HGLLO」となりますが、
FECありでは

48 47 4C 4C 4F A7

FEC「あれ、A7と前のデータが一致しない、A7に基づいてデータを戻さなきゃ」
となり

48 45 4C 4C 4F

と、もどされます

原理

原理としては生徒が渡したHELLOという文字列に対して、先生が点数をつけ仮に100点(A7)だよ~といいます。

ノイズが入っていた際の処理

その先生Aが違う先生Bにデータを渡し、違う先生が点数から逆算し合ってるかをチェックします。
そこで、データを渡した際に何らかの理由でデータが変わったとすると先生Aがつけた点数とデータが合わなくなります。なので、受け取った先生Bが点数から逆算し正しい答えを割り出すという処理だそうです。
気持ち悪いです

NACK

はい、埼玉に住んでる方は79.5といえばわかるかもしれませんが、そのNACKではないと思います。
NACKに関しては割とすんなり理解できました
NACKにはもう一つACKというものがあります。

ACK・NACK
名前 説明
ACK 「受け取ったよ~」という合図
NACK 「壊れてんで~もう一回送ってや」という合図

通信例

AさんがBさんにHELLOという文字列を送るとします
Aさん:

48 45 4C 4C 4F

↓↓↓↓↓↓
Bさん:

48 45 4C 4C 4F

そうすると、サムチェックや、先ほどのFECで正しいかをチェックし、あっていれば

ACK

と返します

仮にまたノイズが入り
Aさん:

48 45 4C 4C 4A

となり、Bさんに送ると先ほどのようにチェックサムorFECでチェックをし間違っていることがわかると

NACK

と送ります。

NACKの中身

NACKの中身は結構シンプルです。

NACKバイト列の具体例(イメージ)
フィールド バイト 意味
Header 1 0x15 NACKですよ~というコード
Sequence No 1 0x07 7番目のパケット壊れてんで~
Error code 1 0x02 CRCエラー(通信破損)
Checksum 1 0x94 NACKメッセージの整合性確認
となり全体は
15 07 02 94

となります

最後に

二度と出きれば触れたくない特にFEC

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?