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

Android Streamlabs から配信した時に音声が再生できない。 #99

Closed
plonk opened this issue Oct 21, 2020 · 1 comment
Closed

Comments

@plonk
Copy link
Owner

plonk commented Oct 21, 2020

モノラル設定で Streamlabs から nginx に配信し、RTMP フェッチでチャンネルを立てた場合、音声が再生されなかった。

@plonk
Copy link
Owner Author

plonk commented Oct 21, 2020

ヘッドパケットにつめこむFLVタグの判定基準において、音声のヘッダーが、ステレオのAACだと決め打ちされていた。

        if (flvTag.data[0] == 0xaf && flvTag.data[1] == 0x00) 

(第1バイトの上位ニブルが Ah であることは AAC フォーマットであること、下位ニブルが Fh であることは 44KHz 16bit ステレオであることを表わす。第2バイトが 0 であることは、ペイロードが AAC シーケンスヘッダーであることを表わす。)

結果として、上記以外の音声形式の場合音声ヘッダーが認識されず、ヘッドパケットに入れられないので、音声が再生されないという現象が起こっていた。

3153b5b にて、最初のAUDIODATAタグは常にヘッダーとして扱うように変更した。

また、VIDEODATAタグについても同様の決め打ちがなされていた。

        if (flvTag.data[0] == 0x17 && flvTag.data[1] == 0x00 &&
            flvTag.data[2] == 0x00 && flvTag.data[3] == 0x00) 

(最初の3バイトは、キーフレーム、フォーマットがAVCのシーケンスヘッダーであることを示す。4バイト目は AVCDecoderConfigurationRecord がバイト0で始まることを示すが、これの意味はわからない。)

これも音声の場合と同様に変更した。

参考:

FLV spec

@plonk plonk closed this as completed Oct 21, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant