Baseflow / Baseflow/XamarinMediaManager
Cannot play audio from stream in Android
- Dominant language
- C#
- Stars
- 763
- Forks
- 299
- PR merge metrics
- No merged PRs in 30d
Description
## 🐛 Bug Report
Can not play audio from stream in Android. This part was working in Xamarin. But in MAUI gives this error
```
Playback error
[ExoPlayerImplInternal] com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error
[ExoPlayerImplInternal] at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:628)
[ExoPlayerImplInternal] at android.os.Handler.dispatchMessage(Handler.java:102)
[ExoPlayerImplInternal] at android.os.Looper.loopOnce(Looper.java:240)
[ExoPlayerImplInternal] at android.os.Looper.loop(Looper.java:351)
[ExoPlayerImplInternal] at android.os.HandlerThread.run(HandlerThread.java:67)
[ExoPlayerImplInternal] Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'com.google.android.exoplayer2.upstream.DataSource com.google.android.exoplayer2.upstream.DataSource$Factory.createDataSource()' on a null object reference
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.ProgressiveMediaSource.createPeriod(ProgressiveMediaSource.java:292)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.MaskingMediaPeriod.createPeriod(MaskingMediaPeriod.java:128)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.MaskingMediaSource.createPeriod(MaskingMediaSource.java:100)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.ConcatenatingMediaSource.createPeriod(ConcatenatingMediaSource.java:489)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.MaskingMediaPeriod.createPeriod(MaskingMediaPeriod.java:128)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.source.MaskingMediaSource.createPeriod(MaskingMediaSource.java:100)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.MediaSourceList.createPeriod(MediaSourceList.java:315)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.MediaPeriodHolder.createMediaPeriod(MediaPeriodHolder.java:433)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.MediaPeriodHolder.(MediaPeriodHolder.java:108)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.MediaPeriodQueue.enqueueNextMediaPeriodHolder(MediaPeriodQueue.java:190)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.ExoPlayerImplInternal.maybeUpdateLoadingPeriod(ExoPlayerImplInternal.java:1983)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.ExoPlayerImplInternal.updatePeriods(ExoPlayerImplInternal.java:1970)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:968)
[ExoPlayerImplInternal] at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:502)
```
### Expected behavior
Should be able to play meditation from memory stream
### Reproduction steps
Play audio file from stream
```
Stream stream = new MemoryStream(file.Bytes);
await CrossMediaManager.Current.Play(new MediaItem
{
Data = stream,
MediaType = MediaType.Audio,
MediaLocation = MediaLocation.InMemory,
MimeType = MediaManager.Media.MimeType.AudioMp3,
});
```
### Configuration
**Version:** 1.2.2
**Platform:**
- [ ] :robot: Android 13
- [ ] :monkey: MAUI
- [ ] .NET 8
Contributor guide
Research direction
Start by reproducing the issue with the provided MemoryStream and MediaItem example on Android, then trace how the Android ExoPlayer media source is created for in-memory audio. Done means the MP3 meditation stream plays without the reported ExoPlayer NullPointerException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, csharp
- Domain
- audio-video-rtc, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100