【问题标题】:Android-x86 4.3 audioAndroid-x86 4.3 音频
【发布时间】:2013-11-20 23:02:28
【问题描述】:

我正在构建一个嵌入式系统,我们运行的是 Android x86 4.2.2,它通过一些调整和驱动程序运行良好,但是在运行 4.3 时我遇到了没有声音的问题。我有一个从 Ubuntu 生成的 asound.state 文件,我可以使用 alsa_ctl restore 加载并在 4.2.2 中工作,但在 4.3.1 分支中我没有音频,这是我尝试收听铃声时的 logcat 转储:

D/Ringtone( 3265): Successfully created local player
I/OMXCodec( 5285): [OMX.google.vorbis.decoder] allocating 4 buffers of size 32768 on     output port
    I/OMXCodec( 5285): [OMX.google.vorbis.decoder] allocated buffer 0xb7af0ff0 on output port
I/OMXCodec( 5285): [OMX.google.vorbis.decoder] allocated buffer 0xb7af1110 on output port
I/OMXCodec( 5285): [OMX.google.vorbis.decoder] allocated buffer 0xb7af1230 on output port
I/OMXCodec( 5285): [OMX.google.vorbis.decoder] allocated buffer 0xb7aeeea0 on output port
F/libc    ( 5285): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 5290 (AudioOut_2)
I/DEBUG   ( 1256): ***

 *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 1256): Build fingerprint: 'Generic-Plus/generic_plus/plus:4.3.1/JLS36I/eng.ubuntu.20131120.190444:eng/test-keys'
I/DEBUG   ( 1256): Revision: '0'
I/DEBUG   ( 1256): pid: 5285, tid: 5290, name: AudioOut_2  >>> /system/bin/mediaserver <<<
I/DEBUG   ( 1256): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004
W/NativeCrashListener( 1486): Couldn't find ProcessRecord for pid 5285
I/DEBUG   ( 1256):     eax 00000000  ebx b62e8f20  ecx 00000000  edx 00000000
I/DEBUG   ( 1256):     esi b7adbba0  edi 00000004
I/DEBUG   ( 1256):     xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000  xss 0000007b
I/DEBUG   ( 1256):     eip b62e5ce7  ebp 00000006  esp b616ec88  flags 00010246
I/DEBUG   ( 1256): 
I/DEBUG   ( 1256): backtrace:
I/DEBUG   ( 1256):     #00  pc 00003ce7  /system/lib/hw/audio.primary.x86.so (reset_mixer_state+7)
I/DEBUG   ( 1256):     #01  pc 0000341e  /system/lib/hw/audio.primary.x86.so (out_set_parameters+238)
I/DEBUG   ( 1256):     #02  pc 0004e186  /system/lib/libaudioflinger.so (android::AudioFlinger::MixerThread::checkForNewParameters_l()+1094)
I/DEBUG   ( 1256):     #03  pc 0004e8c8  /system/lib/libaudioflinger.so (android::AudioFlinger::PlaybackThread::threadLoop()+632)
I/DEBUG   ( 1256):     #04  pc 0001ba59  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+585)
I/DEBUG   ( 1256):     #05  pc 0001bc2e  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+270)
I/DEBUG   ( 1256):     #06  pc 0000b674  /system/lib/libc.so (__thread_entry+132)
I/DEBUG   ( 1256):     #07  pc 0002ec65  /system/lib/libc.so (__pthread_clone+69)
I/DEBUG   ( 1256):     #08  pc ffffffff  <unknown>
I/DEBUG   ( 1256):     #09  pc 000101af  [heap]
I/DEBUG   ( 1256):     #10  pc 0000b04f  [heap]
I/DEBUG   ( 1256):     #11  pc 0000acbf  [heap]
I/DEBUG   ( 1256):     #12  pc 000072ef  [heap]
I/DEBUG   ( 1256): 
I/DEBUG   ( 1256): stack:
I/DEBUG   ( 1256):          b616ec48  0000000a  
I/DEBUG   ( 1256):          b616ec4c  00000000  
I/DEBUG   ( 1256):          b616ec50  00000000  
I/DEBUG   ( 1256):          b616ec54  00000000  
I/DEBUG   ( 1256):          b616ec58  00000000  
I/DEBUG   ( 1256):          b616ec5c  00000000  
I/DEBUG   ( 1256):          b616ec60  00000000  
I/DEBUG   ( 1256):          b616ec64  00000000  
I/DEBUG   ( 1256):          b616ec68  00000000  
I/DEBUG   ( 1256):          b616ec6c  00000000  
I/DEBUG   ( 1256):          b616ec70  00000000  
I/DEBUG   ( 1256):          b616ec74  00000000  
I/DEBUG   ( 1256):          b616ec78  00000000  
I/DEBUG   ( 1256):          b616ec7c  00000000  
I/DEBUG   ( 1256):          b616ec80  b7adbba0  [heap]
I/DEBUG   ( 1256):          b616ec84  b7690dc6  /system/lib/libc.so (atoi+6)
I/DEBUG   ( 1256):     #00  b616ec88  b7adbba0  [heap]
I/DEBUG   ( 1256):          b616ec8c  b62e541f  /system/lib/hw/audio.primary.x86.so (out_set_parameters+239)
I/DEBUG   ( 1256):     #01  b616ec90  00000000  
I/DEBUG   ( 1256):          b616ec94  b62e6515  /system/lib/hw/audio.primary.x86.so
I/DEBUG   ( 1256):          b616ec98  b616eccc  [stack:5290]
I/DEBUG   ( 1256):          b616ec9c  00000020  
I/DEBUG   ( 1256):          b616eca0  b7af22d0  [heap]
I/DEBUG   ( 1256):          b616eca4  00000000  
I/DEBUG   ( 1256):          b616eca8  b629a010  
I/DEBUG   ( 1256):          b616ecac  b7af2280  [heap]
I/DEBUG   ( 1256):          b616ecb0  00000001  
I/DEBUG   ( 1256):          b616ecb4  b7adbc28  [heap]
I/DEBUG   ( 1256):          b616ecb8  00000004  
I/DEBUG   ( 1256):          b616ecbc  00000000  
I/DEBUG   ( 1256):          b616ecc0  b616ece0  [stack:5290]
I/DEBUG   ( 1256):          b616ecc4  b7647bc6  /system/lib/libc.so (free+6)
I/DEBUG   ( 1256):          b616ecc8  b75a2e4c  /system/lib/libutils.so
I/DEBUG   ( 1256):          b616eccc  b7580036  /system/lib/libutils.so (android::BufferedTextOutput::getBuffer() const+166)
I/DEBUG   ( 1256):          ........  ........
I/DEBUG   ( 1256):     #02  b616ed10  b7adbdb0  [heap]
I/DEBUG   ( 1256):          b616ed14  b7af2270  [heap]
I/DEBUG   ( 1256):          b616ed18  b616ed54  [stack:5290]
I/DEBUG   ( 1256):          b616ed1c  b7adb2d4  [heap]
I/DEBUG   ( 1256):          b616ed20  ffffffea  
I/DEBUG   ( 1256):          b616ed24  00800000  
I/DEBUG   ( 1256):          b616ed28  b629a03c  
I/DEBUG   ( 1256):          b616ed2c  b77807f2  /system/lib/libaudioflinger.so
I/DEBUG   ( 1256):          b616ed30  b77807f9  /system/lib/libaudioflinger.so
I/DEBUG   ( 1256):          b616ed34  b7780807  /system/lib/libaudioflinger.so
I/DEBUG   ( 1256):          b616ed38  b77807dd  /system/lib/libaudioflinger.so
I/DEBUG   ( 1256):          b616ed3c  b77807e9  /system/lib/libaudioflinger.so
I/DEBUG   ( 1256):          b616ed40  b629a034  
I/DEBUG   ( 1256):          b616ed44  b629a060  
I/DEBUG   ( 1256):          b616ed48  b629a064  
I/DEBUG   ( 1256):          b616ed4c  00000001  
I/DEBUG   ( 1256):          ........  ........
I/BootReceiver( 1486): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE)
I/ServiceManager( 1253): service 'media.audio_flinger' died
I/ServiceManager( 1253): service 'media.player' died
I/ServiceManager( 1253): service 'media.camera' died
I/ServiceManager( 1253): service 'media.audio_policy' died
W/AudioSystem( 3265): AudioFlinger server died!
W/IMediaDeathNotifier( 3265): media server died
E/MediaPlayer( 3265): error (100, 0)
W/AudioSystem( 1486): AudioFlinger server died!
W/AudioSystem( 1486): AudioPolicyService server died!
E/MediaPlayer( 3265): Error (100,0)
D/dalvikvm( 1486): GC_CONCURRENT freed 778K, 23% free 7827K/10144K, paused 1ms+3ms, total 33ms
I/mediaserver( 5356): ServiceManager: 0xb8baaaf0
I/AudioFlinger( 5356): Using default 3000 mSec as standby time.
I/CameraService( 5356): CameraService started (pid=5356)
E/CameraService( 5356): Could not load camera HAL module
I/AudioPolicyManagerBase( 5356): loadAudioPolicyConfig() loaded /system/etc/audio_policy.conf
E/audio_hw_primary( 5356): Failed to open /system/etc/mixer_paths.xml
I/AudioFlinger( 5356): loadHwModule() Loaded primary audio interface from Grouper audio HW HAL (audio) handle 1
I/AudioFlinger( 5356): HAL output buffer size 512 frames, normal mix buffer size 1024 frames
I/AudioMixer( 5356): found effect "Multichannel Downmix To Stereo" from The Android Open Source Project
E/MonoPipe( 5356): Failed to fetch local time frequency when constructing a MonoPipe (res = -32).  getNextWriteTimestamp calls will be non-functional
I/AudioFlinger( 5356): Using module 1 has the primary audio interface
I/AudioFlinger( 5356): AudioFlinger's thread 0xb622c010 ready to run
I/audio_a2dp_hw( 5356): adev_open:  adev_open in A2dp_hw module
I/AudioFlinger( 5356): loadHwModule() Loaded a2dp audio interface from A2DP Audio HW HAL (audio) handle 3
I/AudioFlinger( 5356): loadHwModule() Loaded usb audio interface from USB audio HW HAL (audio) handle 4
I/AudioPolicyService( 5356): Loaded audio policy from LEGACY Audio Policy HAL (audio_policy)
D/skia    ( 2550): --- SkImageDecoder::Factory returned null
D/skia    ( 2550): --- SkImageDecoder::Factory returned null
E/AudioService( 1486): Media server died.
E/AudioService( 1486): Media server started.
W/AudioPolicyManagerBase( 5356): setPhoneState() setting same state 0

有人有什么建议吗? alsa_amixer 输出:

Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]

还有 /proc/asound/cards:

 0 [Generic        ]: HDA-Intel - HD-Audio Generic
                  HD-Audio Generic at 0xfeb44000 irq 41
 1 [SB             ]: HDA-Intel - HDA ATI SB
                  HDA ATI SB at 0xfeb40000 irq 16
 2 [Camera         ]: USB-Audio - e-con's 3MP AF USB Camera
                  e-con System e-con's 3MP AF USB Camera at usb-0000:00:12.2-2.4, high    speed

lsmod | grep snd 输出:

root@plus:/ # lsmod | grep snd
snd_usb_audio 97187 0 - Live 0x00000000
snd_usbmidi_lib 13865 1 snd_usb_audio, Live 0x00000000
snd_rawmidi 15365 1 snd_usbmidi_lib, Live 0x00000000
snd_seq_device 4709 1 snd_rawmidi, Live 0x00000000
snd_hda_codec_realtek 30372 1 - Live 0x00000000
snd_hda_codec_hdmi 23024 1 - Live 0x00000000
snd_hda_intel 27216 0 - Live 0x00000000
snd_hda_codec 122789 3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel, Live 0x00000000
snd_hwdep 4225 2 snd_usb_audio,snd_hda_codec, Live 0x00000000
snd_pcm 61471 4 snd_usb_audio,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec, Live 0x00000000
snd_timer 14493 1 snd_pcm, Live 0x00000000
snd_page_alloc 6242 2 snd_hda_intel,snd_pcm, Live 0x00000000

alsa_play -l 输出:

root@plus:/ # alsa_aplay -l                                                    
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

更新

所以运行: dd if=/dev/urandom bs=8000 count=1 | aplay -D 插件:0,0 结果是: aplay:main:661:音频打开错误:没有这样的文件或目录 标准输出:写入错误:管道损坏 1+0 条记录在 0+0 条记录输出 在 0.124 秒内传输 0 字节(0 字节/秒)

所以那里没有任何工作,不足为奇,但是使用设备 1 运行相同的命令,即 plughw:1,0 会导致声音成功播放:

Playing raw data 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
dd if=/dev/urandom bs=8000 count=1 | alsa_aplay -D plughw:1,0                         <
1+0 records in
1+0 records out
8000 bytes transferred in 0.003 secs (2666666 bytes/sec)
Playing raw data 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono

看来我需要根据下面的评论将默认声卡切换到设备 1,但是如何使用 alsa_ctl -f asound.state restore 切换默认声卡?如果是这样,我如何在该文件中指定此语法?

state.Generic {
control.1 {
    iface CARD
    name 'HDMI/DP,pcm=3 Jack'
    value false
    comment {
        access read
        type BOOLEAN
        count 1
    }
}
control.2 {
    iface MIXER
    name 'IEC958 Playback Con Mask'
    value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    comment {
        access read
        type IEC958
        count 1
......

【问题讨论】:

  • 我假设您已经拥有或可以构建具有调试符号的 audio.primary.x86.so 的副本。所以第一步应该是使用addr2lineobjdump 找到发生崩溃的确切代码行(EIP 0x00003ce7)。
  • 您的第一个(默认)声卡是 HDMI 输出;你可能想改变它。
  • 谢谢@CL 我对 alsa 命令不是很熟悉,文档也很少。我怎么会改变它?基本上我想要的默认设置是 USB 摄像头音频。我认为 asound.state 恢复会像在 4.2.2 中那样修复它,但它似乎在这里不起作用。谢谢!
  • @Michael 谢谢,我检查了硬件/libaudio,在 alsa.mk 中它包括 audio.primary.x86。

标签: android audio alsa android-x86


【解决方案1】:

在您发布的 logcat 跟踪中,您在 Android-x86 4.3 中遇到的段错误是由于缺少对传递给 hardware/libaudio/audio_hw.c 中的各种函数的空指针参数的检查

我在错误报告中发布了修复该问题的补丁:http://code.google.com/p/android-x86/issues/detail?id=1209#c2

【讨论】:

    【解决方案2】:

    要使 USB 音频设备成为第一个设备,请将以下内容放入 /etc/modprobe.d/ 中的某个 .conf 文件中:

    options snd slots=snd-usb-audio,snd-hda-intel,snd-hda-intel
    

    (在任何普通的 Linux 上;Android 可能不同。)

    【讨论】:

    • 这就是我的想法,但在那里添加文件似乎没有任何作用......我发现 /system/usr/share/alsa 有一些配置,这使我能够设置默认为 1,这让我可以播​​放文件,并且我有 alsa_aplay something.way 的声音......但是由于某种原因,系统和应用程序似乎没有使用该卡播放,因为我的应用程序仍然没有音频。
    猜你喜欢
    • 2012-06-17
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2011-12-17
    相关资源
    最近更新 更多