проверить на возможное WebRTC solutions в разделе 5 .... Не работал с ним, но звучит как его портной, сделанный для того, что вы пытаетесь сделать. Возможно использовать Ondello api.
ИЛИ
Вы должны построить сеанс для связи SIP/RTP, обеспечивая бэкдор (JNI и машинный код) в буфер, который принимает необработанный поток микрофона или выходной буфер, где микрофон сырья поток закодирован ... Посредством этого вы можете загружать поток RTP со стороны отправителя с помощью аудиосигнала предварительной записи.
С помощью этого буфера, находящегося в середине сеанса SIP, вы можете использовать Xcopy из версии вашего аудиофайла в памяти, заменяя этот поток на вызов SIP. Сторона на другом конце вызова услышит звук из аудиофайла, а не содержание микрофона.
Если вы не успели с помощью SIP/RTP apis, вы также можете проверить эту очень хорошую сетевую библиотеку java, которая позволяет вам строить SIP-соединения с нуля и свопировать буферы любым способом, который вы хотите.
https://github.com/brunodecarvalho/efflux
см мой ответ на этом thread
ВАРИАНТА 2, клиент-сервере (не JNI родного кода треб здесь)
Загрузить аудио от отправителя и обслуживать его с вашего сервера как RTSP к приемнику. Любое видео Youtube, которое раньше (по-прежнему может быть) закодировано для клиентов RTSP, является довольно известным сценарием от сервера к Android-медиа-плееру. Я считаю, что это описание SDP такого файла и журнал сеанса ...
D/chooseit(6854): Session Descriptor
D/chooseit(6854): v=0
D/chooseit(6854): o=GoogleStreamer 1263099257 1890734730 IN IP4 74.125.213.247
D/chooseit(6854): s=Video
D/chooseit(6854): c=IN IP4 0.0.0.0
D/chooseit(6854): b=AS:51
D/chooseit(6854): t=0 0
D/chooseit(6854): a=control:*
D/chooseit(6854): a=range:npt=0-63.800000
D/chooseit(6854): m=video 0 RTP/AVP 98
D/chooseit(6854): b=AS:39
D/chooseit(6854): a=rtpmap:98 H263-2000/90000
D/chooseit(6854): a=control:trackID=0
D/chooseit(6854): a=cliprect:0,0,144,176
D/chooseit(6854): a=framesize:98 176-144
D/chooseit(6854): a=fmtp:98 profile=0;level=10
D/chooseit(6854): m=audio 0 RTP/AVP 99
D/chooseit(6854): b=AS:12
D/chooseit(6854): a=rtpmap:99 AMR/8000/1
D/chooseit(6854): a=control:trackID=1
D/chooseit(6854): a=fmtp:99 octet-align
D/chooseit(6854): Got response:
D/chooseit(6854): RTSP/1.0 200 OK
D/chooseit(6854): Content-Type: application/sdp
D/chooseit(6854): Cache-Control: must-revalidate
D/chooseit(6854): Date: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): Expires: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): Last-Modified: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): Content-Base: rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/
D/chooseit(6854): CSeq: 0
D/chooseit(6854): Server: Google RTSP 1.0
D/chooseit(6854): Content-Length: 406
D/chooseit(6854):
D/chooseit(6854): for the request:
D/chooseit(6854): DESCRIBE rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp RTSP/1.0
D/chooseit(6854): CSeq: 0
D/chooseit(6854): Accept: application/sdp
D/chooseit(6854): User-Agent: RTSPClientLib/Java
D/chooseit(6854):
D/chooseit(6854): Got response:
D/chooseit(6854): RTSP/1.0 200 OK
D/chooseit(6854): Session: 328393bf;timeout=90
D/chooseit(6854): Transport: RTP/AVP;unicast;mode=play;client_port=49060-49061;server_port=10580-10581;source=74.125.213.247;ssrc=55922C32
D/chooseit(6854): Cache-Control: must-revalidate
D/chooseit(6854): Date: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): Expires: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): Last-Modified: Wed, 28 Sep 2011 17:27:22 GMT
D/chooseit(6854): CSeq: 1
D/chooseit(6854): Server: Google RTSP 1.0
D/chooseit(6854):
D/chooseit(6854): for the request:
D/chooseit(6854): SETUP rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/trackID=1 RTSP/1.0
D/chooseit(6854): CSeq: 1
D/chooseit(6854): Transport: RTP/AVP;unicast;client_port=49060-49061
D/chooseit(6854): User-Agent: RTSPClientLib/Java
D/chooseit(6854):
D/chooseit(6854): using client IP addr 192.168.1.125
D/chooseit(6854): remote ssrc 1435642930
D/chooseit(6854): raw parms 49060 10580 74.125.213.247
D/chooseit(6854): session: 328393bf
D/chooseit(6854): transport: client_port=49060-49061 server_port=10580-10581 source=74.125.213.247 ssrc=55922C32
D/chooseit(6854): Got response:
D/chooseit(6854): RTSP/1.0 200 OK
D/chooseit(6854): Session: 328393bf;timeout=90
D/chooseit(6854): Range: npt=0.000-63.800
D/chooseit(6854): RTP-Info: url=rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/trackID=1;seq=9498;rtpt
ime=958652148
D/chooseit(6854): CSeq: 2
D/chooseit(6854): Server: Google RTSP 1.0
D/chooseit(6854):
D/chooseit(6854): for the request:
D/chooseit(6854): PLAY rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp RTSP/1.0
D/chooseit(6854): CSeq: 2
D/chooseit(6854): Session: 328393bf;timeout=90
D/chooseit(6854): Range: npt=0.000-
D/chooseit(6854): User-Agent: RTSPClientLib/Java
Спасибо за ваш ответ. Звучит interresing. Я проверю ваши ссылки. Вы сделали что-то подобное? Я установил звонок с MjSip. Как получить этот буфер микрофона?Вы работали с API efflux и дали мне подсказку/пример того, как ее использовать? – B770
на «efflux», попробуйте тестовую папку для примера. –
Я видел это, но нет комментариев или комментариев. Так что я действительно не знаю, как использовать эти образцы – B770