我最近开始使用opentok react native,这真是一个绝妙的体验。我正在尝试共享我的Android屏幕。当我不使用任何viro react组件(ViroARScene)时,屏幕共享可以正常工作。当我邀请发布者对组件做出反应时,除了该组件以外的所有组件都在订户侧可见。 viro组件部分在订阅服务器上变黑了。我已经附上了项目的图像和代码。
/**
* Copyright (c) 2017-present, Viro, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
import React, { Component } from 'react';
import { OTSession, OTPublisher, OTSubscriber } from 'opentok-react-native';
import {
AppRegistry,
Text,
View,
StyleSheet,
PixelRatio,
TouchableHighlight,
} from 'react-native';
import {
ViroVRSceneNavigator,
ViroARSceneNavigator
} from 'react-viro';
/*
TODO: Insert your API key below
*/
var sharedProps = {
apiKey:"API_KEY_HERE",
}
// Sets the default scene you want for AR and VR
var InitialARScene = require('./js/HelloWorldSceneAR');
var InitialVRScene = require('./js/HelloWorldScene');
var UNSET = "UNSET";
var VR_NAVIGATOR_TYPE = "VR";
var AR_NAVIGATOR_TYPE = "AR";
// This determines which type of experience to launch in, or UNSET, if the user should
// be presented with a choice of AR or VR. By default, we offer the user a choice.
var defaultNavigatorType = UNSET;
export default class ViroSample extends Component {
constructor() {
super();
this.state = {
navigatorType : defaultNavigatorType,
sharedProps : sharedProps
}
this._getExperienceSelector = this._getExperienceSelector.bind(this);
this._getARNavigator = this._getARNavigator.bind(this);
this._getVRNavigator = this._getVRNavigator.bind(this);
this._getExperienceButtonOnPress = this._getExperienceButtonOnPress.bind(this);
this._exitViro = this._exitViro.bind(this);
this.apiKey = '46640082';
this.sessionId = '2_MX40NjY0MDA4Mn5-MTU4NTk0NjY5ODc1Mn45OG13bmdLbTU0QTlDNldoNXVDRnJMQkl-fg';
this.token = 'T1==cGFydG5lcl9pZD00NjY0MDA4MiZzaWc9ZjFiZDcwZDM4ZTE0ZTdkYWFmZjlkYmIxYzdmY2M3YWIwMGJhMTc2YzpzZXNzaW9uX2lkPTJfTVg0ME5qWTBNREE0TW41LU1UVTROVGswTmpZNU9EYzFNbjQ1T0cxM2JtZExiVFUwUVRsRE5sZG9OWFZEUm5KTVFrbC1mZyZjcmVhdGVfdGltZT0xNTg1OTQ2NzIwJm5vbmNlPTAuNjU5ODEzMzM3NzYyMjUxNSZyb2xlPXB1Ymxpc2hlciZleHBpcmVfdGltZT0xNTg4NTM4NzE4JmluaXRpYWxfbGF5b3V0X2NsYXNzX2xpc3Q9';
this.publisherProperties = {
publishAudio: false,
videoSource: "screen"
};
}
// Replace this function with the contents of _getVRNavigator() or _getARNavigator()
// if you are building a specific type of experience.
render() {
if (this.state.navigatorType == UNSET) {
return this._getExperienceSelector();
} else if (this.state.navigatorType == VR_NAVIGATOR_TYPE) {
return this._getVRNavigator();
} else if (this.state.navigatorType == AR_NAVIGATOR_TYPE) {
return this._getARNavigator();
}
}
// Presents the user with a choice of an AR or VR experience
_getExperienceSelector() {
return (
<View style={localStyles.outer} >
<View style={localStyles.inner} >
<Text style={localStyles.titleText}>
Choose your desired experience:
</Text>
<TouchableHighlight style={localStyles.buttons}
onPress={this._getExperienceButtonOnPress(AR_NAVIGATOR_TYPE)}
underlayColor={'#68a0ff'} >
<Text style={localStyles.buttonText}>AR</Text>
</TouchableHighlight>
<TouchableHighlight style={localStyles.buttons}
onPress={this._getExperienceButtonOnPress(VR_NAVIGATOR_TYPE)}
underlayColor={'#68a0ff'} >
<Text style={localStyles.buttonText}>VR</Text>
</TouchableHighlight>
</View>
</View>
);
}
// Returns the ViroARSceneNavigator which will start the AR experience
_getARNavigator() {
return (
<View style={{ flex: 1 }}>
<ViroARSceneNavigator {...this.state.sharedProps}
initialScene={{scene: InitialARScene}} />
<OTSession apiKey={this.apiKey} sessionId={this.sessionId} token={this.token}>
<OTPublisher properties={this.publisherProperties} style={{ width: 20, height: 20 }} />
</OTSession>
</View>
);
}
// Returns the ViroSceneNavigator which will start the VR experience
_getVRNavigator() {
return (
<ViroVRSceneNavigator {...this.state.sharedProps}
initialScene={{scene: InitialVRScene}} onExitViro={this._exitViro}/>
);
}
// This function returns an anonymous/lambda function to be used
// by the experience selector buttons
_getExperienceButtonOnPress(navigatorType) {
return () => {
this.setState({
navigatorType : navigatorType
})
}
}
// This function "exits" Viro by setting the navigatorType to UNSET.
_exitViro() {
this.setState({
navigatorType : UNSET
})
}
}
var localStyles = StyleSheet.create({
viroContainer :{
flex : 1,
backgroundColor: "black",
},
outer : {
flex : 1,
flexDirection: 'row',
alignItems:'center',
backgroundColor: "black",
},
inner: {
flex : 1,
flexDirection: 'column',
alignItems:'center',
backgroundColor: "black",
},
titleText: {
paddingTop: 30,
paddingBottom: 20,
color:'#fff',
textAlign:'center',
fontSize : 25
},
buttonText: {
color:'#fff',
textAlign:'center',
fontSize : 20
},
buttons : {
height: 80,
width: 150,
paddingTop:20,
paddingBottom:20,
marginTop: 10,
marginBottom: 10,
backgroundColor:'#68a0cf',
borderRadius: 10,
borderWidth: 1,
borderColor: '#fff',
},
exitButton : {
height: 50,
width: 100,
paddingTop:10,
paddingBottom:10,
marginTop: 10,
marginBottom: 10,
backgroundColor:'#68a0cf',
borderRadius: 10,
borderWidth: 1,
borderColor: '#fff',
}
});
module.exports = ViroSample