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

画面キャプチャ時の音声データの送信方法について #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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants