Skip to content
New issue

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

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

Already on GitHub? # to your account

画面キャプチャ時の音声データの送信方法について #29

Open
FromAtom opened this issue Aug 1, 2019 · 5 comments
Open
Assignees

Comments

@FromAtom
Copy link

FromAtom commented Aug 1, 2019

JSのSDKでは stream.addTrack(); と処理を行い、音声データを送信することができますが、それと同等の機能はiOS SDKではどのように実現すれば良いでしょう。

困っている点としては、 RPBroadcastSampleHandler を継承したClassで得られた CMSampleBuffermainStream.send(videoFrame: frame) で送りたいのですが、 .audioApp.audioMic: タイプの CMSampleBufferVideoFrame(from: CMSampleBuffer) でインスタンスが生成できない点です。

@FromAtom FromAtom changed the title audioTrackの送信方法について 画面キャプチャ時の音声データの送信方法について Aug 1, 2019
@voluntas
Copy link
Member

voluntas commented Aug 2, 2019

@FromAtom 結論から先に言いますと、 Sora iOS SDK ではマイク以外の任意の音声データを送信することができません。これは libwebrtc (iOS) の音声に関する実装がデバイスのマイクと密接に結びついており、任意の音声データを送信する仕組みが用意されていないからです。 libwebrtc (iOS) の実装の問題であり、残念ながら Sora iOS SDK ではどうにもできず、有力な回避策もないのが現状です。ご期待に沿えず申し訳ありません。

なお、他社のサービスによっては iOS で任意の音声データを送信できる場合がありますが、そのようなサービスでは libwebrtc の実装にかなり手を加えている可能性があります。現在の弊社のリソースで libwebrtc の実装にカスタマイズを行い、メンテナンスを行うのは難しいので、その対応が現実的ではありません。

困っている点としては、 RPBroadcastSampleHandler を継承したClassで得られた CMSampleBuffermainStream.send(videoFrame: frame) で送りたいのですが、 .audioApp.audioMic: タイプの CMSampleBufferVideoFrame(from: CMSampleBuffer) でインスタンスが生成できない点です。

VideoFrame は上記の理由で音声データに対応していません。また、 VideoFrame は libwebrtc の RTCVideoFrame のラッパーとして実装されていますが、 RTCVideoFrame の現在の仕様では音声データを持てません。こちらも libwebrtc (iOS) 実装に依存しているためです。

申し訳ないです .. 。

@voluntas
Copy link
Member

voluntas commented Aug 2, 2019

こちらの issues は問題が解決されるまで Open にしておきます。

@FromAtom
Copy link
Author

FromAtom commented Aug 5, 2019

@voluntas 詳細な説明ありがとうございます。libwebrtcの制約について理解しました。

問題を解決するために追加で質問なのですが、 https://github.com/shiguredo/sora-ios-sdk-samples/tree/develop/ScreenCastSample/ScreenCastSample を参考にReplayKitを利用したScreenCastを実装した場合は、問題なくマイク音声を取得して送信することができました。しかし、ReplayKitのBroadcast Upload Extensionを利用して画面収録を行った際には、マイク音声を送信することができませんでした。

ReplayKitのマイクが利用されないように、

Sora.shared.configureAudioSession {
	RPScreenRecorder.shared().isCameraEnabled = false
	RPScreenRecorder.shared().isMicrophoneEnabled = false

	do {
		try AVAudioSession.sharedInstance().setActive(true, options: [])
	} catch(let error) {
		print(error)
	}
}

といったコードを記載し、InfoPlistにもマイクを利用するための設定を記載してあります。そのうえで、 func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {} 内で .audioMic タイプのCMSampleBufferが取得されていることは確認できているのですが、実際に配信している動画ではマイク音声を送ることができません。

こちらはlibwebrtcの制約で、Broadcast Upload Extensionではマイク音声が送れないことになっているのでしょうか?それとも、なにかこちらで指定すべきパラメータなどが抜け漏れているのでしょうか?

@voluntas
Copy link
Member

voluntas commented Aug 7, 2019

@FromAtom おまたせして申し訳ないです。今の所の結論としては libwebrtc 側の制約でマイク音声が流れないという認識でいます。

このマイク以外からの音声データが入力できない問題は弊社としても課題と考えておりまして、なんとか実現できないかと思い、以前1度調査をしたのですが、かなり難しい事がわかっています。

以前の調査資料の一部内容を省いたものです。

iOS SDK: 外部audioをWebRTC経由で流す方法の調査

なんとか実現をしたいと考えておりますので、もう一度、調査と検討してみます。おまたせして申し訳ありません。

@FromAtom
Copy link
Author

FromAtom commented Aug 7, 2019

@voluntas なるほど。やはり libwebrtc の制約の可能性が高いのですね。わかりました。

調査・検討していただけるとのことで、ありがとうございます。こちらでも調査を続けつつ、お待ちしております。

enm10k pushed a commit that referenced this issue Mar 19, 2021
- add line separators between next step in getting started
- remove unfinished setup guide with Prisma migrate for now
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

3 participants