Je possède des appareils intégrés qui n'ont pas de périphérique audio par défaut. Ils communiquent entre eux via un FPGA. Donc ma question est, comment puis-je capturer/lire de l'audio à partir de pjsip en pcm afin de l'envoyer/de le recevoir avec le FPGA?
Je sais qu'il existe pjmedia_mem_player_create() et pjmedia_mem_capture_create() mais je n'arrive pas à trouver des bonnes informations sur l'utilisation de ces fonctions.
J'ai essayé le morceau de code suivant, mais une assertion a échoué car l'un des paramètres de la fonction est "vide".
Erreur:
pjmedia_mem_capture_create: Assertion `pool && buffer && size && clock_rate && channel_count && samples_per_frame && bits_per_sample && p_port' failed.
Remarque : J'utilise principalement pjsua2 pour tout le reste comme les enregistrements, les transports, etc. De plus, l'audio par défaut est défini sur null avec ep.audDevManager().setNullDev(); car sans cela, passer/recevoir un appel échouerait simplement ?!
void MyCall::onCallMediaState(OnCallMediaStateParam &prm){
CallInfo ci = getInfo();
pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0);
pj_pool_t *pool = pj_pool_create(&cp.factory, "POOLNAME", 2000, 2000, NULL);
void *buffer;
pjmedia_port *prt;
#define CLOCK_RATE 8000
#define CHANELS 1
#define SAMPLES_PER_FRAME 480
#define BITS_PER_SAMPLE 16
pjmedia_mem_capture_create( pool, //Pool
buffer, //Buffer
2000, //Buffer Size
CLOCK_RATE,
CHANELS,
SAMPLES_PER_FRAME,
BITS_PER_SAMPLE,
0, //Options
&prt); //The return port}
MISE À JOUR
L'assertion a échoué car la variable de buffer n'a pas de mémoire qui lui est attribuée. Allouez deux fois la quantité de samples par frame pour avoir suffisamment de mémoire.
buffer = pj_pool_zalloc(pool, 960);
Un rappel doit également être enregistré avec pjmedia_mem_capture_set_eof_cb2()
(Le deux à la fin est nécessaire pour PJSIP 2.10 ou ultérieur) Apparemment, à partir de là, le buffer peut être utilisé. Mais pour le moment, mon implémentation n'exécute pas le rappel.
0 votes
Avez-vous fait des progrès à ce sujet? Je suis bloqué avec le même problème
0 votes
Aucun pour le moment. J'avais essayé de contacter les développeurs mais malheureusement aucune réponse.