Giter Site home page Giter Site logo

exoplayer's Introduction

ExoPlayer

ExoPlayer is an application level media player for Android. The latest version is published as part of AndroidX Media under a new package name and all future development will be in that project.

Deprecation

This project is deprecated. All users should migrate to AndroidX Media3. Please refer to our migration guide and script to move your codebase to the Media3 package names.

  • As of 2024-04-03 we have stopped pushing commits to the dev-v2 branch in this repository. New ExoPlayer code is available in the AndroidX Media GitHub repository: https://github.com/androidx/media
  • exoplayer:2.19.1 was the last artifact released from this project, we don't plan to release any more.

exoplayer's People

Contributors

1nsun avatar andrewlewis avatar aquilescanta avatar botaydotcom avatar christosts avatar claincly avatar dburckh avatar dway123 avatar erdemguven avatar hamzah-z avatar hmsch avatar icbaker avatar jaewan-github avatar kim-vde avatar krocard avatar leonwind avatar marcbaechinger avatar microkatz avatar ojw28 avatar oxygencobalt avatar rohitjoins avatar samrobbo avatar sheenachhabra avatar sim0629 avatar sofijajvc avatar szaboa avatar tianyif avatar tof-tof avatar tonihei avatar ybai001 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

exoplayer's Issues

Cross-domain redirects fail on Android L

It was unclear whether this bug was actually and ExoPlayer issue, or is in fact an Android L issue. However, since the change in behaviour only happens when I use the ExoPlayer, I thought best to raise here...

  • Device: Nexus 7
  • OS: Android L Developer Preview

When attempting to play a video from a server which returns a redirect (302) with a Location pointing to a different domain, the ExoPlayer refuses to start playback. Instead, the following error message is written to the logcat:

W/MediaHTTPConnection﹕ readAt 0 / 32768 => java.net.NoRouteToHostException: Cross-domain redirects are disallowed

If instead of using ExoPlayer, I use the native MediaPlayer on the same URL, it works. This URL also works on all previous versions of Android. The error message is quite precise, but I am unaware of any designed changes in the network security. Especially since it's quite popular to redirect resources to CDNs which are likely to be cross-domain.

Unfortunately, the test videos I have to test against would involve a significant amount of setup. I'm happy to provide a guide if required, but it should be possible to reproduce this issue with a local HTTP server redirecting to an online video.

Is TextTrackRenderer fully implemented?

I have started to look at the TextTrackRenderer, but do not see any examples or documentation on how to set it up. I just wanted to ask if there is anything available before I dive in and start to figure out how to do it.

I assume that I can extend the functionality of the DefaultRendererBuilder to also support building the text renderer?
Does the TextTrackRenderer constructor just take a FrameworkSampleSource with the URI pointed to the appropriate TTML file?

Thanks, Andy

ExoPlayer cache

Can give me sample how cache video. And How do play video from cache. I have found CacheDataSource, but I don't know how it use.

H.264 codec with SurfaceView vs TextureView on certain KitKat devices

On certain KitKat devices I am seeing weird video artifacts when using ExoPlayer to render H.264 with a TextureView.

I have a previous implementation of my rendering pipeline that used MediaCodec directly and it does not exhibit this issue. Also using ExoPlayer with SurfaceView does not exhibit this issue.
Also, I've only observed this on certain KitKat devices (see table below).

Screenshot of ExoPlayer with TextureView showing issue:
exoplayer-textureview

Screenshot of expected good video:
mediacodec-textureview

Here's a test matrix showing when issue occurs. FAIL means the video artifacts are seen.

Device Android Ver. ExoPlayer or MediaCodec View Type PASS/FAIL
Samsung S4 4.4.2 ExoPlayer TextureView FAIL
Samsung S3 4.4.2 ExoPlayer TextureView FAIL
Samsung S4 4.4.2 ExoPlayer SurfaceView Pass
Samsung S3 4.4.2 ExoPlayer SurfaceView Pass
Samsung S4 4.4.2 MediaCodec TextureView Pass
Samsung S3 4.4.2 MediaCodec TextureView Pass
Nexus 5 4.4.4 ExoPlayer SurfaceView Pass
Nexus 5 4.4.4 ExoPlayer TextureView Pass
Nexus 5 4.4.4 MediaCodec SurfaceView Pass
Nexus 5 4.4.4 MediaCodec TextureView Pass

Http classes not easily extendable

Both ManifestFetcher and HttpDataSource can not easily be extended. Use case is wanting to inject a better network stack such as OKHTTP or ION. These can still easily be replaced due to the modularity of ExoPlayer although it would be nice to leverage a little bit of the implementation for both of these classes rather than copy/paste. It would be great if there was a common http interface to plug in where ever http is used in this project.

Video buffering all file but don't play

Most of the time when mobile have low internet bandwidth the player download and buffering all video file, but the player don't play and photo still freeze.
So if you want to rerun the video you must click previous button until the start of video.
this happen in both SimplePlayerActivity and FullPlayerActivity.

Anamorphic video reports incorrect onVideoSizeChanged

This issue occurs when using either the FrameworkSampleSource or the DASH support. I'm using the following code to detect the size of the video in order to correctly specify the expected aspect ratio:

  @Override
  public void onVideoSizeChanged(int width, int height)
  {
    // Update the expected aspect ratio of the VideoSurface.
    m_videoSurface.setVideoWidthHeightRatio(width / (float)height);
  }

The problem is that the width and height provided in this callback do not take into account the pixel aspect ratio of anamorphic content. Internally, the video player should know the whether it is dealing with non-1:1 pixel aspect ratio. Is this exposed anywhere? Is there a way for me to determine the "real" video width and height?

missing proguard file

I see that the recommended proguard settings for this project are on the gitignore list. I think it would be helpful to add this to the repository.

DASH video Host?

ExoPlayer seems great, problem is we can't find an affordable host for DASH content. It looks like a majority of the samples in the demo app are hosted by youtube. However, I can't find documentation anywhere on this manifest/dash api that is being used.

Is this a public api? Is there a way for independent devs to use it? Can you recommend any other host if not youtube?

Here is example of youtube host I am talking about:
http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=255F6B3C07C753C88708C07EA31B7A1A10703C8D.2D6A28B21F921D0B245CDCF36F7EB54A2B5ABFC2&key=ik0

Video playback doesn't automatically start for certain MP4s

I've been testing a number of playback scenarios and have found that 'some' MP4s which are using the DefaultRendererBuilder don't actually start playback until a seekTo request is made.

Here's the log of the Demo application attempting to play one of these MP4s:

07-22 15:02:15.843  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch Down
07-22 15:02:15.923  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch UP
07-22 15:02:15.993  15430-15430/com.google.android.exoplayer.demo I/ActivityManager﹕ Timeline: Activity_launch_request id:com.google.android.exoplayer.demo time:71928056
07-22 15:02:16.093  15430-15430/com.google.android.exoplayer.demo I/ExoPlayerImpl﹕ Init 1.0.11
07-22 15:02:16.223  15430-15430/com.google.android.exoplayer.demo I/ActivityManager﹕ Timeline: Activity_idle id: android.os.BinderProxy@4293a680 time:71928282
07-22 15:02:16.383  15430-15659/com.google.android.exoplayer.demo V/MediaExtractor﹕ MediaExtractor create
07-22 15:02:16.383  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetMediaType start
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetMainType start
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetSubType start
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetFTYPSubType start
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetFTYPSubType end
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetSubType end
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ Pre GetMediaType [nMain:196608][nSub:196610]
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetMediaType [nMain:3][nSub:2]
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/LgeMediaDetector﹕ GetMediaType end
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo V/MediaExtractor﹕ Autodetected media content as 'video/mp4' with confidence 0.60
07-22 15:02:16.463  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ LG-CodeParser Version: LG_CodecParser_R1.0.0.11
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ SupportCodecEx : 104
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### Video mime video/avc
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/MediaCodecList﹕ getNewMediaCodecItem [0][DTSDecode][audio/dts]
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/MediaCodecList﹕ getNewMediaCodecItem [0][DDPDecode][audio/eac3]
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/MediaCodecList﹕ getNewMediaCodecItem [0][DDPDecode][audio/ac3]
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/MediaCodecList﹕ getNewMediaCodecItem [0][OMX.VisualOn.Video.Decoder.XXX][video/hevc]
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### componentName = OMX.qcom.video.decoder.avc
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 8
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 7
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 6
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 5
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 4
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 3
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 2
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchXmlParserImpl﹕ [BrunchXmlParserImpl::findIndexByKey] typeIndex < 0
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo I/BrunchUsedCodecEx﹕ [removeUsedCodecExLastItem] size = 1
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo W/BrunchUsedCodecImpl﹕ [isUsedCodec] Used codec!!!!! = video/avc
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### componentName = OMX.google.h264.decoder
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo W/BrunchUsedCodecImpl﹕ [isUsedCodec] Used codec!!!!! = video/avc
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ SupportCodecEx : 201
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### Audio mime audio/mp4a-latm
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### componentName = OMX.google.aac.decoder
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo W/BrunchUsedCodecImpl﹕ [isUsedCodec] Used codec!!!!! = audio/mp4a-latm
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### componentName = AACDecoder
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo W/BrunchUsedCodecImpl﹕ [isUsedCodec] Used codec!!!!! = audio/mp4a-latm
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo E/MediaExtractorHelper﹕ #### componentName = OMX.qcom.audio.decoder.multiaac
07-22 15:02:16.473  15430-15659/com.google.android.exoplayer.demo W/BrunchUsedCodecImpl﹕ [isUsedCodec] Used codec!!!!! = audio/mp4a-latm
07-22 15:02:16.513  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.513  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.513  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.513  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.513  15430-15659/com.google.android.exoplayer.demo I/OMXClient﹕ Using client-side OMX mux.
07-22 15:02:16.523  15430-15679/com.google.android.exoplayer.demo I/OMXClient﹕ Using client-side OMX mux.
07-22 15:02:16.533  15430-15679/com.google.android.exoplayer.demo E/ACodec﹕ [OMX.qcom.video.decoder.avc] storeMetaDataInBuffers failed w/ err -2147483648
07-22 15:02:16.533  15430-15679/com.google.android.exoplayer.demo I/ACodec﹕ DRC Mode: Port Reconfig Mode
07-22 15:02:16.533  15430-15679/com.google.android.exoplayer.demo I/ExtendedCodec﹕ Enabling timestamp reordering
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo I/OMXClient﹕ Using client-side OMX mux.
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo E/OMXMaster﹕ A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo I/﹕ @@@VOLOG Info THD 625AE718:    VOOMXPlugin.cpp  VOOMXPlugin  59    open libvoOMXOne.so successfully. 0X62D4024C
07-22 15:02:16.583  15430-15659/com.google.android.exoplayer.demo E/﹕ VOLOG Info THD 625AE718 voCOMXBaseConfig.cpp Open 368  The config file vomeOne.cfg could not be opened!
07-22 15:02:16.603  15430-15685/com.google.android.exoplayer.demo I/OMXClient﹕ Using client-side OMX mux.
07-22 15:02:16.603  15430-15685/com.google.android.exoplayer.demo E/OMXMaster﹕ A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
07-22 15:02:16.603  15430-15685/com.google.android.exoplayer.demo I/﹕ @@@VOLOG Info THD 625ACF08:    VOOMXPlugin.cpp  VOOMXPlugin  59    open libvoOMXOne.so successfully. 0X62D40004
07-22 15:02:16.603  15430-15685/com.google.android.exoplayer.demo E/﹕ VOLOG Info THD 625ACF08 voCOMXBaseConfig.cpp Open 368  The config file vomeOne.cfg could not be opened!
07-22 15:02:16.613  15430-15686/com.google.android.exoplayer.demo I/SoftAAC2﹕ Reconfiguring decoder: 0->48000 Hz, 0->2 channels
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() no output descriptor for output 2 in gOutputs
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getLatency() streamType 3, output 2, latency 160
07-22 15:02:16.623  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ getMinFrameCount=7680: afFrameCount=960, minBufCount=8, afSampleRate=48000, afLatency=160
07-22 15:02:16.633  15430-15442/com.google.android.exoplayer.demo V/AudioSystem﹕ ioConfigChanged() event 0, ioHandle 3
07-22 15:02:16.633  15430-15442/com.google.android.exoplayer.demo V/AudioSystem﹕ ioConfigChanged() new output samplingRate 48000, format 1 channel mask 0x3 frameCount 960 latency 84
07-22 15:02:16.633  15430-15442/com.google.android.exoplayer.demo V/AudioSystem﹕ ioConfigChanged() event 0, ioHandle 2
07-22 15:02:16.633  15430-15442/com.google.android.exoplayer.demo V/AudioSystem﹕ ioConfigChanged() new output samplingRate 48000, format 1 channel mask 0x3 frameCount 960 latency 160
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ sampleRate 48000, channelMask 0x3, format 1
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ streamType 3
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ set() streamType 3, sampleRate 48000, format 1, frameCount 30720, flags 0000
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getLatency() streamType 3, output 2, latency 160
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ createTrack_l() output 2 afLatency 160
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ afFrameCount=960, minBufCount=8, afSampleRate=48000, afLatency=160
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ minFrameCount: 7680, afFrameCount=960, minBufCount=8, sampleRate=48000, afSampleRate=48000, afLatency=160
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ lge.normalizer.param = version2.0/true/14.5/true/8230/1.0/2050/0.55
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:version = version2.0
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:Enable = "true"
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: SoundNormalizer:Enable set to true
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerMakeupGain = 14.5
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:PreFilter_HPF_350Hz = "true"
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: AudioEffect:SoundNormalizer:PreFilter_HPF_350Hz set to true
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterThreshold = 8230
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterSlope = 1.00
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorThreshold = 2050
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorSlope = 0.55
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2(session: 403): mNormalizerV2->process(framecount: 1)
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2: channelCount = 2, mStreamType = 3, mFlags = 0
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.633  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.643  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.643  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.653  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.653  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.663  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.663  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.673  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.673  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.683  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.683  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.693  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.693  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.703  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.703  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.713  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.713  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.723  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.723  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.733  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.733  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.743  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.743  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:16.753  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:16.753  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:18.573  15430-15674/com.google.android.exoplayer.demo I/NuCachedSource2﹕ Cache full, done prefetching for now

The application then sits there, thinking it's playing, but nothing happening. If you attempt to pause / play, nothing happens. Only when you seek will playback actually start. Here's the log immediately after my first seek:

07-22 15:02:26.853  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch Down
07-22 15:02:26.903  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch UP
07-22 15:02:27.813  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch Down
07-22 15:02:27.833  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.833  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.863  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.863  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.863  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.873  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.883  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.883  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.903  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.913  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.923  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.923  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.933  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.933  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.933  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.933  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.943  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.943  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.943  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.943  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.953  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.953  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.963  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.963  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.963  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.963  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.973  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.973  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ sampleRate 48000, channelMask 0x3, format 1
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ streamType 3
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ set() streamType 3, sampleRate 48000, format 1, frameCount 30720, flags 0000
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getLatency() streamType 3, output 2, latency 160
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ createTrack_l() output 2 afLatency 160
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ afFrameCount=960, minBufCount=8, afSampleRate=48000, afLatency=160
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ minFrameCount: 7680, afFrameCount=960, minBufCount=8, sampleRate=48000, afSampleRate=48000, afLatency=160
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ lge.normalizer.param = version2.0/true/14.5/true/8230/1.0/2050/0.55
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:version = version2.0
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:Enable = "true"
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: SoundNormalizer:Enable set to true
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerMakeupGain = 14.5
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:PreFilter_HPF_350Hz = "true"
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: AudioEffect:SoundNormalizer:PreFilter_HPF_350Hz set to true
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterThreshold = 8230
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterSlope = 1.00
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorThreshold = 2050
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorSlope = 0.55
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2(session: 403): mNormalizerV2->process(framecount: 1)
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2: channelCount = 2, mStreamType = 3, mFlags = 0
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:27.983  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.003  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.003  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.003  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.003  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.013  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.013  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.023  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.023  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.033  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.033  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.053  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.053  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.053  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.053  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.063  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.063  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.073  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.073  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.083  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.083  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.093  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.093  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.103  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.103  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.103  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch UP
07-22 15:02:28.113  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.113  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.123  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.123  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.123  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.123  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ sampleRate 48000, channelMask 0x3, format 1
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ streamType 3
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ set() streamType 3, sampleRate 48000, format 1, frameCount 30720, flags 0000
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getLatency() streamType 3, output 2, latency 160
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getFrameCount() streamType 3, output 2, frameCount 960
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getOutputSamplingRate() reading from output desc
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioSystem﹕ getSamplingRate() streamType 3, output 2, sampling rate 48000
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ createTrack_l() output 2 afLatency 160
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ afFrameCount=960, minBufCount=8, afSampleRate=48000, afLatency=160
07-22 15:02:28.133  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ minFrameCount: 7680, afFrameCount=960, minBufCount=8, sampleRate=48000, afSampleRate=48000, afLatency=160
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ lge.normalizer.param = version2.0/true/14.5/true/8230/1.0/2050/0.55
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:version = version2.0
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:Enable = "true"
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: SoundNormalizer:Enable set to true
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerMakeupGain = 14.5
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ SoundNormalizer:PreFilter_HPF_350Hz = "true"
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: AudioEffect:SoundNormalizer:PreFilter_HPF_350Hz set to true
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterThreshold = 8230
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerLimiterSlope = 1.00
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorThreshold = 2050
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/SoundNormalizerUtil﹕ normalizer V2: normalizerCompressorSlope = 0.55
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2(session: 403): mNormalizerV2->process(framecount: 1)
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo V/AudioTrack﹕ NormalizerV2: channelCount = 2, mStreamType = 3, mFlags = 0
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.143  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.153  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.153  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.163  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.163  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.173  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.173  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.183  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.183  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.193  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.193  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.203  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.203  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.213  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.213  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.223  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.223  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.233  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.233  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.243  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.243  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.253  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.253  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.263  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.263  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.273  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.273  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.283  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.283  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.563  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.563  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.583  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.583  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.613  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.613  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.663  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.663  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.703  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.703  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.753  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.753  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.783  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.783  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.833  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.833  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.893  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.953  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.953  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.973  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:28.973  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:28.983  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch Down
07-22 15:02:29.013  15430-15430/com.google.android.exoplayer.demo I/ViewRootImpl﹕ ViewRoot's Touch Event : Touch UP
07-22 15:02:30.033  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Re-check a condition - 'isMalformed = 0'
07-22 15:02:30.033  15430-15659/com.google.android.exoplayer.demo E/MPEG4Extractor﹕ [LGE-MP4P] Reset mWrongNALCounter.
07-22 15:02:33.613  15430-15674/com.google.android.exoplayer.demo I/NuCachedSource2﹕ Keep alive
07-22 15:02:48.703  15430-15674/com.google.android.exoplayer.demo I/NuCachedSource2﹕ Keep alive

In my own application, i'm working around the issue by detecting when the video is ready to be played and then immediately seeking to the expected offset, e.g.

  @Override
  public void onDrawnToSurface(Surface surface)
  {
    m_player.seekTo(m_offset);
  }

I would link an example of the problematic MP4, but I just need to check with someone first that it's okay to share.

ExoPlayer Audio Playback speed issue

Hi,

I have used ExoPlayer in my app to stream live audio and it is working quite well. I have got complaints from few of the users that the playback speed is double than normal. I am still waiting to get the list of devices that are having this issue. Any idea why some of the devices have this issue??

I have used a very basic code to play audio

Uri builtUri = Uri.parse(BASE_URL);

    // Build the sample source
    FrameworkSampleSource sampleSource = new FrameworkSampleSource(this,
            builtUri, null, 1);

    // Build the track renderers
    TrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(
            sampleSource, null, true);

    // Build the ExoPlayer and start playback
    exoPlayer = ExoPlayer.Factory.newInstance(1);
    exoPlayer.prepare(audioRenderer);
    exoPlayer.setPlayWhenReady(true);
    exoPlayer.addListener(this);

Please note that I have tested ExoPlayer on Samsung and HTC phones and it does work very well.

Any help will be highly appreciated.

Thanks

Error in FrameworkSampleSource for specific m4a files

I am trying to play this file: http://podcast.armadamusic.com/asot/episodes/episode334.m4a

Inside FrameworkSampleSource in prepare() extractor.getTrackCount() gives 4. However android.media.MediaFormat format = extractor.getTrackFormat(i); causes error for i=3. So it seems that it cannot recognize last track format. Here is an error:
E/SampleTable﹕ mNumSyncSamples error
A/Utils﹕ frameworks/av/media/libstagefright/Utils.cpp:108 CHECK(meta->findInt32(kKeyWidth, &width)) failed.
A/libc﹕ Fatal signal 6 (SIGABRT) at 0x00005871 (code=-6), thread 23133 (ExoPlayerImplIn)

Omitting last track causes ExoPlayer to work without problems.

Demo app fails to run on 2.3.4

01-14 21:41:21.336 6953-6953/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoSuchMethodError: com.google.android.exoplayer.demo.SampleChooserActivity$SampleAdapter.addAll
at com.google.android.exoplayer.demo.SampleChooserActivity.onCreate(SampleChooserActivity.java:52)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

How does ExoPlayer support API level 9?

I tried using ExoPlayer in an application that has to support 2.3.7 and above. However, both FrameworkSampleSource and MediaCodecTrackRenderer require API level >= 16. I guess FrameworkSampleSource can be replaced by ChunkSampleSource but what about MediaCodecTrackRenderer? Does anyone have a 9-compatible implementation of TrackRenderer?

Smooth Streaming LIVE support

I can see ExoPlayer supports Smooth Streaming. Does this include Smooth Streaming LIVE as well?

A quick test gives this exception:
07-14 11:21:15.956: E/EventLogger(23424): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
07-14 11:21:15.956: E/EventLogger(23424): at com.google.android.exoplayer.smoothstreaming.SmoothStreamingManifestParser$StreamElementParser.parseStreamFragmentStartTag(SmoothStreamingManifestParser.java:455)

Error while importing the project on Eclipse

Hi,

I've downloaded the project and when I imported it it generated problems.. I tried looking for the file that has generated problems but I didn't find any. The error message pops up when hitting IMPORT after choosing the right path.. Can anybody help me ??

Player crashes when capabilities do not match the MPD file.

In DashVodRendererBuilder onManifest if none of the adaptation sets have video that matches the capability of the device, such as android emulator, the player crashes.

This is due to no check on empty ArrayList videoRepresentationsList before converting to array.
This occurs when the array is accessed at line 167 of DashVodRendererBuilder.java (dev branch)

String mimeType = videoRepresentations[0].format.mimeType;

Implement DASH Live support

I've made a test live source for DASH-IF that is available at http://54.201.151.65/livesim/testpic_2s/Manifest.mpd.

The DASH-IF reference player dash.js can run this content for IE11 on Windows 8.1 and in Chrome 38.0.2 and later.

Some more information is available at http://54.201.151.65/dashifserver.html
Since this is a synthetic live source it is very stable and reliable.

It would be great if you can use this content as a test source as the live support is being further developed. If you have any questions or suggestions, don't hesitate to contact me.

DEFAULT_MIN_BUFFER_MULTIPLICATION_FACTOR in AudioTrackRenderer

I found that if DEFAULT_MIN_BUFFER_MULTIPLICATION_FACTOR is greater than 1, resume the playback that remaining time is in a short time (0 ~ 1 sec) won't play.

What we are concerned to have DEFAULT_MIN_BUFFER_MULTIPLICATION_FACTOR factor, thanks!

Video-only Track/SampleSource

Hi,
I see in your demo code the audio track is configured as the master time source, off of which video rendering is slaved. Could you provide some guidance on how to handle a video-only stream?

I wrote a custom SampleSource that properly provides samples of H.264 ES. Each sample has a presentation timestamp (PTS) that is easily converted to microseconds but the stream has its own timebase.

I am able to render frames by deriving from MediaCodecVideoTrackRenderer and overriding processOutputBuffer() but its a huge hack.

So what would be the right way?
Should I use a time algorithm similar to what you have in MediaCodecAudioTrackRenderer? I think the steps I need to do are:

  • derive from MediaCodecVideoTrackRenderer
  • override isTimeSource() to return true
  • override getCurrentPositionUs() and return time position based on System.nanotime and videoTrackStartMediaTimeUs (time of first video frame rendered)

Thoughts?

Thanks,
Peter

Bound nextIndex on seek to be 0 <= nextIndex <= numSegments

Restarting playback after calling stop()

Has anyone else had a problem with starting local playback again after calling stop()? I'm running a few test cases and have found that ExoPlayer gets stuck in prepare() when trying to restart playback. For the record, my test case is essentially play -> stop -> reinitialize renderers -> set surface -> prepare, upon which it seems to get stuck in STATE_BUFFERING with MediaCodecVideoTrackRenderer.isReady() continually returning false. I'm running it on Android 4.4.4. Thanks!

Unable to play many videos

After downloading the following videos to several devices with our software, I found the exoplayer unable to play many of them. In addition, it failed to start automatically for every single one of them.

The following videos were playable on most devices, but did not autostart. If I skipped the play head forward about 500 milliseconds they would play fine:

http://download.jw.org/files/content_assets/fa/502013341_E_cnt_1_r240P.mp4
http://download.jw.org/files/content_assets/d4/502013341_E_cnt_1_r360P.mp4
http://download.jw.org/files/content_assets/cc/502013341_E_cnt_1_r480P.mp4
http://download.jw.org/files/content_assets/19/502013341_E_cnt_1_r720P.mp4

The following videos were unable to play at all with exoplayer on any device tested, but the native android mediaplayer can play them all on most devices:

http://download.jw.org/files/content_assets/3f/502014311_E_cnt_1_r240P.mp4
http://download.jw.org/files/content_assets/f4/502014311_E_cnt_1_r360P.mp4
http://download.jw.org/files/content_assets/98/502014311_E_cnt_1_r480P.mp4
http://download.jw.org/files/content_assets/9a/502014311_E_cnt_1_r720P.mp4

http://download.jw.org/files/content_assets/e9/502014315_E_cnt_1_r240P.mp4
http://download.jw.org/files/content_assets/0d/502014315_E_cnt_1_r360P.mp4
http://download.jw.org/files/content_assets/09/502014315_E_cnt_1_r480P.mp4
http://download.jw.org/files/content_assets/2e/502014315_E_cnt_1_r720P.mp4

http://download.jw.org/files/content_assets/10/502014344_E_cnt_1_r240P.mp4
http://download.jw.org/files/content_assets/bc/502014344_E_cnt_1_r360P.mp4
http://download.jw.org/files/content_assets/79/502014344_E_cnt_1_r480P.mp4
http://download.jw.org/files/content_assets/7a/502014344_E_cnt_1_r720P.mp4

The exoplayer also did not appear to work for API 9 and 10 devices at all.

Note that, otherwise, my experience with exoplayer was very good. The documentation was sufficient, the demos were excellent. Once the player was playing I found the quality was good, and I appreciated the flexibility. I was excited about the features and control, but it's inability to play locally hosted content of certain types made it unusable for us. I hope to use it more in the future, and we have retained the code for "streaming-only" situations where we hope that it will perform better than the native MediaPlayer.

ExoPlayer takes too much time to stop/release while in state other than STATE_READY

Hi,

After calling setPlayWhenReady(true), the ExoPlayer goes through many states. But before it reaches the ready state (STATE_READY), if "stop" gets called on the current ExoPlayer object, it takes too much (5-6 seconds) to release the resources and this could hang the app. (In case play and stop buttons are dependent on ExoPlayer state.)

In the exact same scenario, MediaPlayer does update the states immediately.

Any efficient way to handle this scenario.

Thanks,
Khushwant Singh

HTTP stream failed over 3G network

I am using the demo app to stream from the url http://50.31.154.35:80/wnycfm with DefaultRendererBuilder. The live streaming works fine with wifi connection. However, if wifi is off or not connected, the live streaming always stops after playing about one minute. This happens on both Nexus 5 (android 4.4.4) and S5 (android 4.4.2), so it is not a device related issue.

The logcat outputs suggests the buffer is underrun and end of stream is reached.
08-24 12:50:51.775: I/ExoPlayerImpl(29671): Init 1.0.12
08-24 12:51:12.085: I/OMXClient(29671): Using client-side OMX mux.
08-24 12:51:12.085: E/OMXMaster(29671): A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
08-24 12:51:12.095: I/OMXClient(29671): Using client-side OMX mux.
08-24 12:51:12.095: E/OMXMaster(29671): A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
08-24 12:52:42.805: W/AudioTrack(29671): releaseBuffer() track 0x4a38ea88 name=s:185;n:1;f:-1 disabled due to previous underrun, restarting
08-24 12:52:42.805: I/NuCachedSource2(29671): ERROR_END_OF_STREAM

Any help is appreciated!

Playback of SuperSpeed demo fails.

For the non-drm SuperSpeed video, playback fails due to a recently introduced NPE. The fix is trivial (move the line of code into the if block below it), and will be pushed soon:

E/EventLogger(12045): Caused by: java.lang.NullPointerException: Attempt to read from null array
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.parseTraf(FragmentedMp4Extractor.java:784)
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.parseMoof(FragmentedMp4Extractor.java:764)
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.onMoofContainerAtomRead(FragmentedMp4Extractor.java:454)
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.onContainerAtomRead(FragmentedMp4Extractor.java:425)
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.readAtomPayload(FragmentedMp4Extractor.java:403)
E/EventLogger(12045): at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.read(FragmentedMp4Extractor.java:273)
E/EventLogger(12045): ... 10 more

exoplayer not handling video orientation from video metadata

MediaPlayer handles playing videos filmed in portrait mode without issue, playing them with the proper orientation. ExoPlayer with the provided MediaCodecVideoTrackRender does not. Wish I could set an orientation hint with the MediaMetadataRetriever. I guess I can create my own GLSurfaceView and adjust this onDraw, but this is certainly not ideal.

DASH + AC3 audio support appears unsupported

I was having a look at how ExoPlayer would handle DASH with AC3 audio. The main reason for this is that at Google I/O this year (during the main Android TV talk) it was stated that Android L would include support for AC3 and AC3 passthrough. This is of course a major feature for the Android TV, allowing multichannel audio formats.

I attempted to play a DASH which included a AC3 audio track, but found that the parsing of the MP4 failed. This was caused by the lack of support when reading the STSD ATOM, which appears to only handle AVC1, AVC3 and MP4A. (https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/parser/mp4/FragmentedMp4Extractor.java#L589)

@ojw28 - Are there any plans to support AC3 in time for the release of Android L? Also, is the lack of support purely a parsing limitation (at the moment) or are there likely to be various things that need implementing further down the pipeline?

Support wider range of DASH manifests

Currently ExoPlayer only supports a narrow subset of possible DASH manifests. Support should be added for manifests containing segment lists and segment templates.

Note: As a workaround, application developers can already support arbitrary DASH manifests through implementing their own parser and ChunkSource (it's probably useful to use DashMp4ChunkSource as a starting point).

Not working on 2.3.4

ExoPlayer is said to require minimum API=9, but it fails to play video on 2.3.4:

01-14 21:46:15.961 7094-7094/com.google.android.exoplayer.demo E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoSuchFieldError: android.os.AsyncTask.THREAD_POOL_EXECUTOR
at com.google.android.exoplayer.demo.simple.DashVodRendererBuilder.buildRenderers(DashVodRendererBuilder.java:78)
at com.google.android.exoplayer.demo.simple.SimplePlayerActivity.onResume(SimplePlayerActivity.java:130)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
at android.app.Activity.performResume(Activity.java:3882)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2191)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2228)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1721)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

PlaybackException

Could anyone help me to understand and correct this playback exception? I think this may have to do with my custom data source, as the video plays fine with the default http data source. However, it seems to happen randomly and I'm not sure exactly what the problem is. If there was a problem with parsing a frame why isn't it just dropped?

                    E  com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.ParserException: java.lang.IllegalArgumentException: Top bit not zero: -1838046119
                        E      at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:412)
                        E      at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:397)
                        E      at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:203)
                        E      at android.os.Handler.dispatchMessage(Handler.java:98)
                        E      at android.os.Looper.loop(Looper.java:136)
                        E      at android.os.HandlerThread.run(HandlerThread.java:61)
                        E      at com.google.android.exoplayer.ExoPlayerImplInternal$1.run(ExoPlayerImplInternal.java:109)
                        E  Caused by: com.google.android.exoplayer.ParserException: java.lang.IllegalArgumentException: Top bit not zero: -1838046119
                        E      at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.read(FragmentedMp4Extractor.java:241)
                        E      at com.google.android.exoplayer.chunk.Mp4MediaChunk.read(Mp4MediaChunk.java:117)
                        E      at com.google.android.exoplayer.chunk.ChunkSampleSource.readData(ChunkSampleSource.java:336)
                        E      at com.google.android.exoplayer.MediaCodecTrackRenderer.feedInputBuffer(MediaCodecTrackRenderer.java:503)
                        E      at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:405)
                        E      ... 6 more
                        E  Caused by: java.lang.IllegalArgumentException: Top bit not zero: -1838046119
                        E      at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.readUnsignedIntToInt(FragmentedMp4Extractor.java:1167)
                        E      at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.readSample(FragmentedMp4Extractor.java:1085)
                        E      at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.readOrSkipSample(FragmentedMp4Extractor.java:1029)
                        E      at com.google.android.exoplayer.parser.mp4.FragmentedMp4Extractor.read(FragmentedMp4Extractor.java:235)

FrameworkSampleSource fails to stop buffering and start playback

I'm having issues when i'm trying to play an MP4 but at a non-zero offset. I'm allowing the user to "Resume" their video where they last stopped playing, but occasionally (maybe 1 in 3), ExoPlayer refuses to start playback.

I don't think I am doing anything unusual when configuring the player, e.g.

    m_player.prepare(renderers);
    m_player.seekTo(m_offset);

I can see from logging in the onPlayerStateChanged callback, that the video player goes through the following states: STATE_IDLE, STATE_PREPARING and STATE_BUFFERING. It then remains in the buffering state indefinitely.

The issue appears to be effected by the fact i'm trying to seek in the video. I'm yet to have it fail when starting the video at the beginning. Is this a known issue? Are there any workarounds to ensure that playback always begins?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.