Передача звука на устройство DoorbirdAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Передача звука на устройство Doorbird

Сообщение Anonymous »

Я пытаюсь создать приложение для Android, которое подключается к устройству Doorbird. Я знаю официальное приложение компании, но мне нужно больше функций, адаптированных к моим потребностям.
Для тех, кто не знает, что такое устройство Doorbird, Doorbird — это интеллектуальный домофон, продукт компании Doorbird, устройство может передавать аудио и видео от него любому потребителю, например системе Android, через HTTP и RTSP, и он может получать аудио транслировать и воспроизводить его, например, для записи аудио с устройства Android и передать его в Doorbird. Звук имеет формат G711 u-law.
Мне удалось получить видео- и аудиопоток, полученный от Doorbird, и он работает отлично, но мне не удается передать звук, в формат u-law, конечно, для Doorbird.
Я получаю сообщение об ошибке:
HTTP FAILED: java.net.ProtocolException: Неожиданная строка состояния:
Я пробовал передать те же байты, которые я получаю от Doorbird вернулся к Doorbird, но ошибка все та же.
Конечно, я работаю в соответствии с опубликованным ими API, но информации о согласованном протоколе передачи звука не так уж и много.
Официальный API Doorbird
Есть ли пример проекта Android, который интегрируется с Doorbird?
Может ли кто-нибудь помочь в попытке транслировать звук в Doorbird?
Какой протокол должен быть?
Даже тот, кто умеет передавать звук в Doorbird с помощью любых других инструментов и любой системы, а не только ОС Android, буду признателен.
Это то, что я попробовал, Я получил данные от Doorbird (и, как я уже сказал, они работают), подождал 3 секунды и передал их с помощью Retrofit Libray обратно в Doorbird.

Код: Выделить всё

    const val AUDIO_PATH =
"http://192.168.1.187/bha-api/audio-receive.cgi?http-user=XXXXXX0001&http-password=XXXXXXXXXX"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//InputStream inputStream = getResources().openRawResource(R.raw.piano12);
val thread = Thread { this.playUrl() }
thread.start()
//val inStr = assets.open("doorbird_record")

}

private fun playUrl() {
val inStr = URL(AUDIO_PATH).openStream()
val buffer = ByteArray(1000)
var i = 0

//while (inStr.read(buffer).also { i = it } != -1) {

Handler(Looper.getMainLooper()).postDelayed({
//inStr.close()
inStr.read(buffer)
Log.d("DoorbirdLog", inStr.toString())
val part = MultipartBody.Part.createFormData(
"doorbirdStream", "doorbird", buffer.toRequestBody(
("audio/basic").toMediaType()
)
)
//val rb = file.asRequestBody(("audio/*").toMediaType())
val call = NetworkManager.instanceServiceApi.upload(part)
call.enqueue(object : Callback {
override fun onResponse(
call: Call,
response: Response
) {
val i = response.body()
Log.d("success", i.toString())
}

override fun onFailure(call: Call, t: Throwable) {
Log.d("failed", t.message.toString())
}
})

}, 3000)

}
И экземпляр Retrofit:

Код: Выделить всё

@Multipart
@Headers( "Content-Type: audio/basic",
"Content-Length: 9999999",
"Connection: Keep-Alive",
"Cache-Control: no-cache")
@POST("audio-transmit.cgi?http-user=XXXXXX0001&http-password=XXXXXXXXXX")
fun upload(@Part part: MultipartBody.Part): Call
Буду признателен за вашу помощь

Подробнее здесь: https://stackoverflow.com/questions/663 ... ird-device
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»