Как записать звук звонка в PJSIP 2.9 - PullRequest
0 голосов
/ 06 ноября 2019

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

func startSipRecording() -> (started: Bool, startDate: NSDate?) {
    var status = pj_init()
    if status != PJ_SUCCESS.rawValue {
        return (false, nil)
    }
    cpFec = pjsua_data().cp
    /* Must create a pool factory before we can allocate any memory. */
    pj_caching_pool_init(&cpFec!, &pj_pool_factory_default_policy, 0)
    status = pjmedia_endpt_create(&cpFec!.factory, nil, 1, &med_endpt
    )
    if status != PJ_SUCCESS.rawValue {
        return (false, nil)
    }
    pool = pj_pool_create(&cpFec!.factory, "app", 4000, 4000, nil)
    print("Starting recording...")
    let rec = Recording.getNewSipBlanckRecording()
    let files = FileProvider.getRecordingUrl(fileName: rec.fileName)?.path
    let fileName: pj_str_t = pj_str(convertToChar(files))
    print(status == 0 ? "REecorder has been created." : "\(files ?? "")")
    UserDefaults.standard.set(recorder_id, forKey: current_recorder_id)
    UserDefaults.standard.synchronize()
    /* Create WAVE file writer port. */
    let str = String(cString: fileName.ptr, encoding: .utf8)
    status = pjmedia_wav_writer_port_create(pool,
                                            str,
                                            CLOCK_RATE,
                                            NCHANNELS,
                                            SAMPLES_PER_FRAME,
                                            BITS_PER_SAMPLE,
                                            0, 0,
                                            &file_port);
    /* Create sound player port. */
    status = pjmedia_snd_port_create_rec(pool,       /* pool         */
        -1,         /* use default dev.        */
        PJMEDIA_PIA_SRATE(&file_port!.pointee.info),/* clock rate.     */
        PJMEDIA_PIA_CCNT(&file_port!.pointee.info),/* # of channels.       */
        PJMEDIA_PIA_SPF(&file_port!.pointee.info), /* samples per frame.   */
        PJMEDIA_PIA_BITS(&file_port!.pointee.info),/* bits per sample.     */
        0,      /* options      */
        &snd_port       /* returned port       */
    )
    if status != PJ_SUCCESS.rawValue {
        return (false, nil)
    }
    status = pjmedia_snd_port_connect(snd_port, file_port)
//    pj_thread_sleep(10);
    return (true, rec.startDateTime)
}

Вызовите записи устройства только на 1 или 2 секунды. Получить WAV-файл всего за 2 секунды. Пожалуйста, помогите мне. Я также пытался использовать другие методы, которые работают в pjsip 2.7.1, но он зависает в 2.9.

Я тестировал его с симулятора на устройство и вызов устройства, но все время получал один и тот же результат.

...