mirror of
https://github.com/flutter-webrtc/flutter-webrtc
synced 2025-07-07 21:55:37 +00:00
fix: Fixed audio device selection error under Linux. (#1864)
* fix audio device select bug for linux. * fix CI for elinux.
This commit is contained in:
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -136,7 +136,7 @@ jobs:
|
||||
- name: Install ninja-build libgtk-3-dev
|
||||
run: sudo apt-get install -y ninja-build libgtk-3-dev
|
||||
- name: Install elinux
|
||||
run: git clone https://github.com/sony/flutter-elinux.git ~/flutter-elinux
|
||||
run: git clone https://github.com/sony/flutter-elinux.git -b 3.27.1 ~/flutter-elinux
|
||||
- name: Build for elinux
|
||||
working-directory: ./example
|
||||
run: /home/runner/flutter-elinux/bin/flutter-elinux pub get && /home/runner/flutter-elinux/bin/flutter-elinux build elinux
|
||||
|
@ -288,7 +288,6 @@ void FlutterMediaStream::GetUserVideo(const EncodableMap& constraints,
|
||||
if (!video_capturer.get())
|
||||
return;
|
||||
|
||||
|
||||
video_capturer->StartCapture();
|
||||
|
||||
const char* video_source_label = "video_input";
|
||||
@ -333,10 +332,11 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
|
||||
|
||||
for (uint16_t i = 0; i < nb_audio_devices; i++) {
|
||||
base_->audio_device_->RecordingDeviceName(i, strNameUTF8, strGuidUTF8);
|
||||
std::string device_id = strlen(strGuidUTF8) > 0 ? std::string(strGuidUTF8)
|
||||
: std::string(strNameUTF8);
|
||||
EncodableMap audio;
|
||||
audio[EncodableValue("label")] = EncodableValue(std::string(strNameUTF8));
|
||||
audio[EncodableValue("deviceId")] =
|
||||
EncodableValue(std::string(strGuidUTF8));
|
||||
audio[EncodableValue("deviceId")] = EncodableValue(device_id);
|
||||
audio[EncodableValue("facing")] = "";
|
||||
audio[EncodableValue("kind")] = "audioinput";
|
||||
sources.push_back(EncodableValue(audio));
|
||||
@ -345,10 +345,11 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
|
||||
nb_audio_devices = base_->audio_device_->PlayoutDevices();
|
||||
for (uint16_t i = 0; i < nb_audio_devices; i++) {
|
||||
base_->audio_device_->PlayoutDeviceName(i, strNameUTF8, strGuidUTF8);
|
||||
std::string device_id = strlen(strGuidUTF8) > 0 ? std::string(strGuidUTF8)
|
||||
: std::string(strNameUTF8);
|
||||
EncodableMap audio;
|
||||
audio[EncodableValue("label")] = EncodableValue(std::string(strNameUTF8));
|
||||
audio[EncodableValue("deviceId")] =
|
||||
EncodableValue(std::string(strGuidUTF8));
|
||||
audio[EncodableValue("deviceId")] = EncodableValue(device_id);
|
||||
audio[EncodableValue("facing")] = "";
|
||||
audio[EncodableValue("kind")] = "audiooutput";
|
||||
sources.push_back(EncodableValue(audio));
|
||||
@ -373,13 +374,16 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
|
||||
void FlutterMediaStream::SelectAudioOutput(
|
||||
const std::string& device_id,
|
||||
std::unique_ptr<MethodResultProxy> result) {
|
||||
char strPlayoutName[256];
|
||||
char strPlayoutGuid[256];
|
||||
char deviceName[256];
|
||||
char deviceGuid[256];
|
||||
int playout_devices = base_->audio_device_->PlayoutDevices();
|
||||
bool found = false;
|
||||
for (uint16_t i = 0; i < playout_devices; i++) {
|
||||
base_->audio_device_->PlayoutDeviceName(i, strPlayoutName, strPlayoutGuid);
|
||||
if (device_id != "" && device_id == strPlayoutGuid) {
|
||||
base_->audio_device_->PlayoutDeviceName(i, deviceName, deviceGuid);
|
||||
std::string cur_device_id = strlen(deviceGuid) > 0
|
||||
? std::string(deviceGuid)
|
||||
: std::string(deviceName);
|
||||
if (device_id != "" && device_id == cur_device_id) {
|
||||
base_->audio_device_->SetPlayoutDevice(i);
|
||||
found = true;
|
||||
break;
|
||||
@ -395,14 +399,16 @@ void FlutterMediaStream::SelectAudioOutput(
|
||||
void FlutterMediaStream::SelectAudioInput(
|
||||
const std::string& device_id,
|
||||
std::unique_ptr<MethodResultProxy> result) {
|
||||
char strPlayoutName[256];
|
||||
char strPlayoutGuid[256];
|
||||
char deviceName[256];
|
||||
char deviceGuid[256];
|
||||
int playout_devices = base_->audio_device_->RecordingDevices();
|
||||
bool found = false;
|
||||
for (uint16_t i = 0; i < playout_devices; i++) {
|
||||
base_->audio_device_->RecordingDeviceName(i, strPlayoutName,
|
||||
strPlayoutGuid);
|
||||
if (device_id != "" && device_id == strPlayoutGuid) {
|
||||
base_->audio_device_->RecordingDeviceName(i, deviceName, deviceGuid);
|
||||
std::string cur_device_id = strlen(deviceGuid) > 0
|
||||
? std::string(deviceGuid)
|
||||
: std::string(deviceName);
|
||||
if (device_id != "" && device_id == cur_device_id) {
|
||||
base_->audio_device_->SetRecordingDevice(i);
|
||||
found = true;
|
||||
break;
|
||||
@ -538,14 +544,14 @@ void FlutterMediaStream::MediaStreamTrackDispose(
|
||||
if (track->id().std_string() == track_id) {
|
||||
stream->RemoveTrack(track);
|
||||
|
||||
if (base_->video_capturers_.find(track_id) !=
|
||||
base_->video_capturers_.end()) {
|
||||
auto video_capture = base_->video_capturers_[track_id];
|
||||
if (video_capture->CaptureStarted()) {
|
||||
video_capture->StopCapture();
|
||||
if (base_->video_capturers_.find(track_id) !=
|
||||
base_->video_capturers_.end()) {
|
||||
auto video_capture = base_->video_capturers_[track_id];
|
||||
if (video_capture->CaptureStarted()) {
|
||||
video_capture->StopCapture();
|
||||
}
|
||||
base_->video_capturers_.erase(track_id);
|
||||
}
|
||||
base_->video_capturers_.erase(track_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user