Среда разработки:
Версия React Native: 0.72.4
Библиотека WebRTC: act-native-webrtc@124.0.1
Устройство: [Укажите модель устройства и версия Android]
Описание проблемы:
Находящееся в разработке приложение без проблем запускается на моем физическом устройстве. Однако после создания приложения для внутреннего тестирования и загрузки его на свой мобильный телефон приложение вылетает сразу после открытия.
Журнал сбоев:
оболочка
Копировать код
backtrace:
#00 pc 0x000000000004e178 /apex/com.android.runtime/lib64/bionic/libc.so (abort+168)#01 pc 0x000000000048f0d0 /data/app/~~v1sHNyhUJKmfVIBYxpV5CQ==/com.eaglepay-lXPuf-sJpZLS-NbW3KAyJA==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: c3f 38365fb86f33a)
Фрагмент кода:
Вот упрощенная версия соответствующего кода в моем приложении:
Код: Выделить всё
import { SafeAreaView, StyleSheet, View } from 'react-native';
import {
RTCPeerConnection,
RTCSessionDescription,
RTCView,
} from 'react-native-webrtc';
import { Buffer } from 'buffer';
const STREAMING_URL = 'https://example.com/webrtc';
const WebRtcNativeStream = ({ url = STREAMING_URL, delay = 2000 }) => {
const [remoteStream, setRemoteStream] = useState(null);
const pc = useRef();
const servers = {
iceServers: [
{ urls: ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302'] },
],
iceCandidatePoolSize: 10,
};
const startStreaming = async () => {
try {
pc.current = new RTCPeerConnection(servers);
pc.current.onicecandidate = event => {
if (event.candidate) {
console.log('ICE Candidate:', event.candidate);
} else {
console.log('End of ICE candidates.');
}
};
pc.current.ontrack = event => {
if (event.streams && event.streams[0]) {
setRemoteStream(event.streams[0]);
} else {
console.warn('No streams in ontrack event.');
}
};
const offer = await pc.current.createOffer({
offerToReceiveAudio: true,
offerToReceiveVideo: true,
});
await pc.current.setLocalDescription(offer);
const formData = new FormData();
formData.append('data', Buffer.from(pc.current.localDescription.sdp).toString('base64'));
const response = await fetch(url, { method: 'POST', body: formData });
const data = await response.text();
await pc.current.setRemoteDescription(new RTCSessionDescription({
type: 'answer',
sdp: Buffer.from(data, 'base64').toString('utf-8'),
}));
} catch (error) {
console.error('Error during call setup:', error);
}
};
useEffect(() => {
const timer = setTimeout(() => {
startStreaming();
}, delay);
return () => {
clearTimeout(timer);
if (pc.current) {
pc.current.close();
}
setRemoteStream(null);
};
}, [url, delay]);
return (
{remoteStream && (
)}
);
};
const styles = StyleSheet.create({
container: {
backgroundColor: '#313131',
justifyContent: 'center',
alignItems: 'center',
height: '100%',
},
rtcview: {
justifyContent: 'center',
alignItems: 'center',
height: '100%',
width: '100%',
backgroundColor: 'black',
},
rtc: {
width: '100%',
height: '100%',
},
});
export default WebRtcNativeStream;
Я буду признателен за любые идеи и предложения по устранению этого сбоя. Кто-нибудь сталкивался с подобной проблемой или может указать, что может пойти не так? Мы будем очень признательны за любую помощь!
К вашему сведению, то же самое работает и в приложении для iOS без каких-либо сбоев.
Подробнее здесь: https://stackoverflow.com/questions/786 ... tive-webrt
Мобильная версия