Я использую LFLiveKit для потоковой передачи видео только с устройства, и он работает хорошо. Теперь я хочу загрузить аудиофайл, чтобы он воспроизводился вместе с ним. Мы используем сервер WOWZA с rtmp-ссылкой для потоковой передачи и воспроизведения. Код, который я использую, воспроизводит песню в случайном порядке в течение 10-15 секунд, а также на некоторое время зависает видеопоток. Я нажимаю звук после начала сеанса. Будем очень признательны за любую помощь в исправлении этой проблемы.
Если кто-то хочет проверить, как кодируется звук в библиотеке
LFLiveKit — https://github.com/LaiFengiOS/LFLiveKit
lazy var session: LFLiveSession = {
let audioConfiguration = LFLiveAudioConfiguration.defaultConfiguration(for: .medium)
audioConfiguration?.numberOfChannels = 1
let videoConfiguration = LFLiveVideoConfiguration.defaultConfiguration(for: .high3)
let session = LFLiveSession(audioConfiguration: audioConfiguration, videoConfiguration: videoConfiguration, captureType: .captureMaskVideoInputAudio)
session?.captureDevicePosition = .back
session?.delegate = self
session?.preView = self.videView
session?.showDebugInfo = true
return session!
}()
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: ) {
if controller.documentPickerMode == ... -to-server
Захват образца звука для передачи звука на сервер в режиме реального времени. ⇐ IOS
Программируем под IOS
1712716747
Anonymous
Я использую LFLiveKit для потоковой передачи видео только с устройства, и он работает хорошо. Теперь я хочу загрузить аудиофайл, чтобы он воспроизводился вместе с ним. Мы используем сервер WOWZA с rtmp-ссылкой для потоковой передачи и воспроизведения. Код, который я использую, воспроизводит песню в случайном порядке в течение 10-15 секунд, а также на некоторое время зависает видеопоток. Я нажимаю звук после начала сеанса. Будем очень признательны за любую помощь в исправлении этой проблемы.
Если кто-то хочет проверить, как кодируется звук в библиотеке
LFLiveKit — https://github.com/LaiFengiOS/LFLiveKit
lazy var session: LFLiveSession = {
let audioConfiguration = LFLiveAudioConfiguration.defaultConfiguration(for: .medium)
audioConfiguration?.numberOfChannels = 1
let videoConfiguration = LFLiveVideoConfiguration.defaultConfiguration(for: .high3)
let session = LFLiveSession(audioConfiguration: audioConfiguration, videoConfiguration: videoConfiguration, captureType: .captureMaskVideoInputAudio)
session?.captureDevicePosition = .back
session?.delegate = self
session?.preView = self.videView
session?.showDebugInfo = true
return session!
}()
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
if controller.documentPickerMode == .import{
let firstURL = urls[0] //song path
let songAsset = AVAsset(url: firstURL)
loopAmplitudes(audioFileUrl: firstURL)
}
}
func loopAmplitudes(audioFileUrl: URL) {
let asset = AVAsset(url: audioFileUrl)
let reader = try! AVAssetReader(asset: asset)
let track = asset.tracks(withMediaType: AVMediaType.audio)[0]
let settings = [
AVFormatIDKey : kAudioFormatLinearPCM,
AVNumberOfChannelsKey: 1,
AVLinearPCMBitDepthKey: 16,
AVSampleRateKey: track.naturalTimeScale,
AVLinearPCMIsNonInterleaved: false,
AVLinearPCMIsFloatKey: false,
AVLinearPCMIsBigEndianKey: false,
] as [String : Any]
let readerOutput = AVAssetReaderTrackOutput(track: track, outputSettings: settings)
reader.add(readerOutput)
reader.startReading()
while let sampleBuffer = readerOutput.copyNextSampleBuffer() {
var audioBufferList = AudioBufferList(mNumberBuffers: 1, mBuffers: AudioBuffer(mNumberChannels: 0, mDataByteSize: 0, mData: nil))
var blockBuffer: CMBlockBuffer?
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, bufferListSizeNeededOut: nil, bufferListOut: &audioBufferList, bufferListSize: MemoryLayout.size, blockBufferAllocator: nil, blockBufferMemoryAllocator: nil, flags: kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, blockBufferOut: &blockBuffer)
let buffers = UnsafeBufferPointer(start: &audioBufferList.mBuffers, count: Int(audioBufferList.mNumberBuffers))
for audioBuffer in buffers {
let audio = audioBuffer.mData!.assumingMemoryBound(to: UInt8.self) //WORKING PARTIALLY
let newdata = Data(bytes: audio, count: Int(audioBuffer.mDataByteSize))
session.pushAudio(newdata)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/63771435/capture-audio-sample-to-push-audio-in-realtime-to-server[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия