Ҳама хонед
Чанде пеш мо
Барои телефон, қарор дода шуд, ки барнома интихоб карда шавад simple_pjsua ҳамчун қисми китобхонаи PJSIP. Ин як барномаи ҳадди аққалест, ки метавонад дар сервер сабти ном шавад, зангҳоро қабул ва посух диҳад. Дар зер ман фавран тавсифи онро дар бораи STM32F7-Discovery иҷро мекунам.
Чӣ тавр давидан
- Танзимоти Embox
make confload-platform/pjsip/stm32f7cube
- Ҳисоби зарурии SIP-ро дар файли conf/mods.config насб кунед.
include platform.pjsip.cmd.simple_pjsua_imported( sip_domain="server", sip_user="username", sip_passwd="password")
ки сервер сервери SIP аст (масалан, sip.linphone.org), Логин и гузарвожа - номи корбар ва пароли ҳисоб.
- Ҷамъоварии Embox ҳамчун як даста кунад. Дар бораи нармафзори тахтае, ки мо дорем
wiki ва дармақола . - Фармони "simple_pjsua_imported" -ро дар консоли Embox иҷро кунед
00:00:12.870 pjsua_acc.c ....SIP outbound status for acc 0 is not active 00:00:12.884 pjsua_acc.c ....sip:[email protected]: registration success, status=200 (Registration succes 00:00:12.911 pjsua_acc.c ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s
- Дар ниҳоят, гузоштани баландгӯякҳо ё гӯшмонакҳо ба баромади аудио ва бо ду микрофони хурди MEMS дар паҳлӯи экран сухан гуфтан боқӣ мемонад. Мо аз Linux тавассути замимаи simple_pjsua, pjsua занг мезанем. Хуб, ё шумо метавонед ягон намуди дигари телефонро истифода баред.
Ҳамаи ин дар мо тасвир шудааст
Чӣ тавр мо ба он ҷо расидем
Ҳамин тавр, дар аввал савол дар бораи интихоби платформаи сахтафзор ба миён омад. Азбаски маълум буд, ки STM32F4-Discovery аз хотира мувофиқат намекунад, STM32F7-Discovery интихоб карда шуд. Вай дорои 1 МБ флешдор ва 256 КБ хотираи оперативӣ мебошад (+ 64 хотираи махсуси зуд, ки мо онро низ истифода хоҳем кард). Инчунин барои зангҳо тавассути сервер зиёд нест, аммо мо қарор додем, ки кӯшиш кунем, ки ба он мувофиқат кунем.
Шартӣ барои худ, вазифа ба якчанд марҳила тақсим карда шуд:
- Иҷрои PJSIP дар QEMU. Он барои ислоҳ кардан қулай буд, илова бар он мо аллакай кодеки AC97-ро дастгирӣ мекардем.
- Сабт ва навозиш дар QEMU ва STM32.
- Интиқоли барнома simple_pjsua аз PJSIP. Он ба шумо имкон медиҳад, ки дар сервери SIP сабти ном шавед ва занг занед.
- Сервери худро дар асоси ситорача ҷойгир кунед ва дар он озмоиш кунед, пас серверҳои беруна, ба монанди sip.linphone.org -ро санҷед.
Садо дар Embox тавассути Portaudio кор мекунад, ки он дар PISIP низ истифода мешавад. Мушкилоти аввал дар QEMU пайдо шуданд - WAV дар 44100 Гц хуб бозӣ кард, аммо дар 8000 чизе ба таври равшан хато кард. Маълум шуд, ки сухан дар бораи муқаррар кардани басомад меравад - ба таври нобаёнӣ он дар таҷҳизот 44100 буд ва ин ба таври барномавӣ тағир наёфтааст.
Дар ин ҷо, шояд, каме шарҳ додан лозим аст, ки чӣ гуна садо умуман садо медиҳад. Корти садоиро метавон ба ягон ишоракунанда ба порчаи хотирае, ки шумо мехоҳед дар басомади пешакӣ муайяншуда бозӣ кунед ё сабт кунед, насб кунед. Пас аз ба итмом расидани буфер, танаффус тавлид мешавад ва иҷро бо буфери навбатӣ идома меёбад. Гап дар сари он аст, ки ин буферҳо ҳангоми бозӣ кардани бозии қаблӣ бояд пешакӣ пур карда шаванд. Мо бо ин мушкилот минбаъд дар STM32F7 рӯбарӯ хоҳем шуд.
Баъдан, мо серверро иҷора гирифтем ва дар он Asterisk ҷойгир кардем. Азбаски бисёр ислоҳ кардан лозим буд, аммо ман намехостам бо микрофон зиёд сухан гӯям, лозим буд, ки навозиш ва сабти автоматӣ анҷом дода шавад. Барои ин, мо simple_pjsua-ро часпондем, то шумо ба ҷои дастгоҳҳои аудиоӣ файлҳоро лағжонед. Дар PJSIP, ин хеле содда анҷом дода мешавад, зеро онҳо консепсияи портро доранд, ки метавонад дастгоҳ ё файл бошад. Ва ин бандарҳоро метавон ба дигар портҳо чандир пайваст кард. Шумо метавонед кодро дар pjsip мо бубинед
Пас аз он ки он дар QEMU кор кард, мо ба интиқол ба STM32F7-Discovery гузаштем. Мушкилоти аввал дар он аст, ки онҳо ба 1 МБ ROM бе оптимизатсияи компилятори фаъол "-Os" барои андозаи тасвир мувофиқ набуданд. Барои ҳамин мо "-Os"-ро дохил кардем. Ғайр аз он, ямоқи дастгирии C ++-ро ғайрифаъол кардааст, бинобар ин он танҳо барои pjsua лозим аст ва мо simple_pjsua -ро истифода мебарем.
Баъди гузоштан simple_pjsua, карор дод, ки холо барои ба кор андохтани он имконият мавчуд аст. Аммо аввал бояд бо сабт ва навохтани овоз сару кор дошт. Савол ин аст, ки дар куҷо нависед? Мо хотираи беруниро интихоб кардем - SDRAM (128 МБ). Шумо метавонед инро худатон санҷед:
Стерео WAV бо басомади 16000 Гц ва давомнокии 10 сония эҷод мекунад:
record -r 16000 -c 2 -d 10000 -m C0000000
Мо аз даст медиҳем:
play -m C0000000
Дар ин ҷо ду мушкилот вуҷуд дорад. Аввалин бо кодек - WM8994 истифода мешавад ва он дорои як чиз ба монанди слот аст ва 4-тои ин слот вуҷуд дорад. Ҳамин тавр, ба таври нобаёнӣ, агар ин танзим карда нашуда бошад, пас ҳангоми навозиш аудио дар ҳама чор слотҳо бозӣ мекунанд. . Аз ин рӯ, дар басомади 16000 Гц, мо 8000 Гц гирифтем, аммо барои 8000 Гц, бозӣ танҳо кор накард. Вақте ки танҳо ҷойи 0 ва 2 интихоб карда шуданд, он тавре кор мекард, ки лозим буд. Мушкилоти дигар ин интерфейси аудио дар STM32Cube буд, ки дар он баромади аудио тавассути SAI (Serial Audio Interface) бо вуруди аудио ҳамоҳанг кор мекунад (ман тафсилотро нафаҳмидам, аммо маълум шуд, ки онҳо як соати умумӣ доранд ва вақте ки баромади аудио оғоз карда мешавад, аудио ба ягон тариқ ба даромадгоҳи он пайваст карда мешавад). Яъне, шумо онҳоро алоҳида иҷро карда наметавонед, аз ин рӯ мо амалҳои зеринро анҷом додем - вуруди аудио ва баромади аудио ҳамеша кор мекунанд (аз ҷумла таваққуфҳо тавлид мешаванд). Аммо вақте ки дар система ҳеҷ чиз навохта намешавад, мо танҳо як буфери холӣ ба баромади аудио мегузорем ва вақте ки бозӣ оғоз мешавад, мо ростқавлона ба пур кардани он шурӯъ мекунем.
Баъдан, мо бо он вохӯрдем, ки садо ҳангоми сабти овоз хеле ором буд. Ин ба он вобаста аст, ки микрофонҳои MEMS дар STM32F7-Discovery ба гунае дар басомадҳои камтар аз 16000 Гц хуб кор намекунанд. Аз ин рӯ, мо 16000 Гц муқаррар кардем, ҳатто агар 8000 Гц ояд. Барои ин кор, ҳарчанд зарур буд, ки табдили нармафзори як басомад ба дигараш илова карда шавад.
Баъдан, ба ман лозим омад, ки андозаи тӯдаро, ки дар RAM ҷойгир аст, зиёд кунам. Тибқи ҳисобҳои мо, pjsip тақрибан 190 КБ лозим буд ва мо танҳо тақрибан 100 КБ боқӣ мондаем. Дар ин ҷо ман маҷбур будам, ки хотираи беруна - SDRAM (тақрибан 128 KB) -ро истифода барам.
Пас аз ин ҳама таҳрирҳо ман бастаҳои аввалинро байни Linux ва Embox дидам ва садоро шунидам! Аммо садо даҳшатнок буд, на ба мисли QEMU, чизеро фаҳмидан ғайриимкон буд. Пас аз он мо фикр кардем, ки ин чӣ метавонад бошад. Debugging нишон дод, ки Embox танҳо барои пур / бор кардани буферҳои аудио вақт надорад. Дар ҳоле ки pjsip як чаҳорчӯбаро коркард мекард, дар бораи анҷоми коркарди буферӣ 2 танаффус вақт дошт, ки ин хеле зиёд аст. Аввалин фикр дар бораи суръат оптимизатсияи компилятор буд, аммо он аллакай ба PJSIP дохил карда шуда буд. Дуюм нуқтаи шинокунандаи сахтафзор аст, ки мо дар бораи он сӯҳбат кардем
Идеяи навбатӣ ин буд, ки мо бо хотираи беруна кор карда истодаем ва хуб мебуд, ки сохторҳоеро ба он ҷо интиқол диҳем, ки хеле зуд дастрасанд. Ман таҳлили пешакии кай ва дар зери чӣ анҷом додам simple_pjsua хотира ҷудо мекунад. Маълум шуд, ки аз 190 Кб аввал 90 Кб барои эҳтиёҷоти дохилии PJSIP ҷудо шудааст ва ба онҳо чандон дастрас нестанд. Ғайр аз он, ҳангоми занги даромад, функсияи pjsua_call_answer даъват карда мешавад, ки дар он буферҳо барои кор бо фоторамкаҳои воридотӣ ва содиротӣ ҷудо карда мешаванд. Он ҳанӯз тақрибан 100 Kb буд. Ва он гоҳ мо корҳои зеринро анҷом додем. То лаҳзаи занг мо маълумотро дар хотираи беруна ҷойгир мекунем. Ҳамин ки занг занед, мо фавран теппаро бо дигараш иваз мекунем - дар RAM. Ҳамин тариқ, ҳама маълумоти «гарм» ба хотираи тезтар ва пешгӯинашаванда интиқол дода шуданд.
Дар натиҷа, ҳамаи ин якҷоя имкон дод, ки ба кор андохта шаванд simple_pjsua ва тавассути сервери худ занг занед. Ва он гоҳ тавассути серверҳои дигар ба монанди sip.linphone.org.
натиҷаҳои
Дар натиҷа, ба кор андохтан имконпазир шуд simple_pjsua бо интиқоли овоз дар ду самт тавассути сервер. Мушкилоти бо 128 КБ SDRAM-и иловагиро бо истифода аз каме пурқувваттар Cortex-M7 (масалан, STM32F769NI бо 512 КБ RAM) ҳал кардан мумкин аст, аммо дар айни замон мо то ҳол аз умеди ворид шудан ба 256 даст накашидаем. KB 🙂 Мо шод хоҳем шуд, агар касе манфиатдор бошад, Ё беҳтараш онро санҷед. Хамаи манбаъхо, чун одат, дар мост
Манбаъ: will.com