Получение ссылки expo-camera для начала работы по записи видео в функциональном компоненте - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь заставить выставочную камеру записывать видео. Однако я получаю сообщение об ошибке:

[TypeError: camera.recordAsync is not a function. (In ‘camera.recordAsync()’, ‘camera.recordAsync’ is undefined)]

Это реализация:

<Camera 
                style={{ flex: 1 }} 
                type={type}
                ref={camera}
            >
                <View
                style={{
                    flex: 1,
                    backgroundColor: 'transparent',
                    flexDirection: 'row',
                }}>
                <View style={{ alignSelf: 'flex-end', alignItems: 'center', padding: 20, flexDirection: 'row', justifyContent: 'space-between', width: '100%'}}>
                    <MaterialIcons name="video-library" onPress={pickVideo} color={"#eee"} size={45}/>     
                    <RecordingIcon />    
                    <Ionicons name="ios-reverse-camera" onPress={setCameraType} color={"#eee"} size={45}/>                     
                </View>
                </View>
            </Camera>

Важная строка - RecordingIcon. Это значок, который можно нажать для записи и остановки записи.

function RecordingIcon (){
        if(recording){
            stopRecording()
            return (
                <MaterialIcons name="fiber-manual-record" onPress={() => setRecording(false)} color={"#FF0000"} size={60}/>  
            )
        } else {
            record()
            return (
                <MaterialIcons name="fiber-manual-record" onPress={() => setRecording(true)} color={"#eee"} size={60}/>  
            )
        }
    }

Каждый раз, когда я нажимаю значок записи, вызывается одна из этих двух функций.

async function record(){
        console.log("record", camera); 
        if(camera){
            let recording = await camera.recordAsync(); 
        }
    }

    async function stopRecording(){
        console.log("stop recording", camera); 
        if(camera){
            let stopRecording = await camera.stopRecording(); 
        }
    }

Однако, оба из них не работают из-за ошибки вверху:

async function record(){
        console.log("record", camera); 
        if(camera){
            let recording = await camera.recordAsync(); 
        }
    }

    async function stopRecording(){
        console.log("stop recording", camera); 
        if(camera){
            let stopRecording = await camera.stopRecording(); 
        }
    }

Вот как я инициализировал ссылку на камеру.

let camera = useRef(null);

Очень признателен за помощь любого человека, чтобы выяснить, как устранить эту ошибку. Я также пробовал делать camera.current.recordAsyn c () и camera.current.stopRecording (), но получил ту же ошибку.

...