私は、Ice Cream Sandwich より前の Android でうまく機能する音楽アプリを開発しました。しかし、4.0.3 にアップグレードしてから、MediaPlayer でこれまでにないランダムな問題が発生するようになりました。たとえば、これは、インスタンスが再生完了状態にあるときに mediaPlayer.reset を呼び出すことによって取得したものです。
07-10 15:27:51.842: D/NuCachedSource2(13537): [setBreak]mForceBreak = 2
07-10 15:27:51.842: I/ChromiumHTTPDataSourceSupport(13537): initiateDisconnect start
07-10 15:27:51.852: A/libc(13537): Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1)
07-10 15:27:52.362: I/DEBUG(13536): debuggerd: 2012-07-10 15:27:52
07-10 15:27:52.362: I/DEBUG(13536): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-10 15:27:52.362: I/DEBUG(13536): Build fingerprint: 'tmous/htc_ruby/ruby:4.0.3/IML74K/373265.3:user/release-keys'
07-10 15:27:52.362: I/DEBUG(13536): pid: 13537, tid: 13537 >>> /system/bin/mediaserver <<<
07-10 15:27:52.362: I/DEBUG(13536): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000010
[...]
07-10 15:27:52.402: I/DEBUG(13536): scr 60000010
07-10 15:27:52.542: I/DEBUG(13536): #00 pc 00000010
07-10 15:27:52.542: I/DEBUG(13536): #01 pc 0010f70e /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8AddEntryENS_6NetLog9EventTypeENS1_10EventPhaseERK13scoped_refptrINS1_15EventParametersEE)
07-10 15:27:52.542: I/DEBUG(13536): #02 pc 0010f71a /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8EndEventENS_6NetLog9EventTypeERK13scoped_refptrINS1_15EventParametersEE)
07-10 15:27:52.542: I/DEBUG(13536): #03 pc 001a4458 /system/lib/libchromium_net.so (_ZN3net10URLRequest11set_contextEPNS_17URLRequestContextE)
07-10 15:27:52.552: I/DEBUG(13536): #04 pc 0012467e /system/lib/libstagefright.so (_ZN7android10SfDelegate18initiateDisconnectEv)
07-10 15:27:52.552: I/DEBUG(13536): #05 pc 00121ca6 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12disconnect_lEv)
07-10 15:27:52.552: I/DEBUG(13536): #06 pc 00121d04 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource10disconnectEv)
07-10 15:27:52.552: I/DEBUG(13536): #07 pc 00121776 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12breakNetworkEv)
07-10 15:27:52.552: I/DEBUG(13536): #08 pc 00083b38 /system/lib/libstagefright.so (_ZN7android13AwesomePlayer12breakNetworkENS_18FORCE_BREAK_STATUSE)
07-10 15:27:52.552: I/DEBUG(13536): #09 pc 00086c9e /system/lib/libstagefright.so (_ZN7android13AwesomePlayer5resetEv)
07-10 15:27:52.552: I/DEBUG(13536): #10 pc 00027e5e /system/lib/libmediaplayerservice.so (_ZN7android17StagefrightPlayer5resetEv)
07-10 15:27:52.552: I/DEBUG(13536): #11 pc 0002304a /system/lib/libmediaplayerservice.so (_ZN7android18MediaPlayerService6Client5resetEv)
07-10 15:27:52.552: I/DEBUG(13536): #12 pc 00041734 /system/lib/libmedia.so (_ZN7android13BnMediaPlayer10onTransactEjRKNS_6ParcelEPS1_j)
そしてその少し後:
07-10 15:27:55.645: W/AudioSystem(236): AudioFlinger server died!
07-10 15:27:55.645: W/AudioSystem(236): AudioPolicyService server died!
07-10 15:27:55.645: W/AudioSystem(13123): AudioFlinger server died!
07-10 15:27:55.645: W/IMediaDeathNotifier(13123): media server died
07-10 15:27:55.645: E/MediaPlayer(13123): error (100, 0)
07-10 15:27:55.645: E/MediaPlayer(13123): error (100, 0)
07-10 15:27:55.645: I/ServiceManager(116): service 'media.audio_flinger' died
07-10 15:27:55.645: I/ServiceManager(116): service 'media.player' died
07-10 15:27:55.645: I/ServiceManager(116): service 'media.camera' died
07-10 15:27:55.645: I/ServiceManager(116): service 'media.audio_policy' died
07-10 15:27:55.645: I/DEBUG(13536): debuggerd committing suicide to free the zombie!
07-10 15:27:55.665: I/DEBUG(13617): debuggerd: May 2 2012 21:31:04
このレベルでセグメンテーション違反を引き起こす可能性があるものについて、誰かがヒントを持っていますか?
ありがとう。
EDIT : さらに調査した結果、Android 4.0.3 を実行している HTC Ruby (HTC Amaze 4G) でセグメンテーション エラーを再現する簡単な手順をいくつか発見しました。
2 つの MediaPlayer インスタンスを使用する:
- 最初のインスタンスを使用して、リモート オーディオ ファイルの再生を開始します。
- 最初のインスタンスがまだ再生されている間に、2 番目のインスタンスを使用して別のリモート オーディオ ファイルの再生を開始します。
- 最初のインスタンスが再生を完了したら、reset を呼び出します。これで問題ありません。
- 2 番目のインスタンスが再生を完了したら、reset() を呼び出します。予期せず、これにより Chromium 内で SIGSEGV が発生し、Media Server Died エラーがすべてのインスタンスにディスパッチされます。