2

我正在尝试在 Android 模拟器中播放 m3u8 文件。 http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

它无法播放视频,但可以听到音频。
我收到以下错误E/OMXNodeInstance( 39): OMX_GetExtensionIndex failed

我跟踪了这​​些调用,发现视频解码器没有正确实例化,
我发现它OMXNodeInstance::enableGraphicBuffers正在被调用,然后调用,
OMX_ERRORTYPE err = OMX_GetExtensionIndex(...,const_cast<OMX_STRING>("OMX.google.android.index.enableAndroidNativeBuffers"),...);
然后调用OMX_ERRORTYPE SoftOMXComponent::getExtensionIndex
但是这个函数没有实现。
它只返回 UndefinedError (下面的代码)

OMX_ERRORTYPE SoftOMXComponent::getExtensionIndex(const char *name, OMX_INDEXTYPE *index)
{
return OMX_ErrorUndefined;
}

有人可以帮我克服这个 GetExtentionIndex 失败。在下面登录

/ChromiumHTTPDataSource( 39): connect to http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8 @0
V/NuPlayer( 39): scanning sources haveAudio=0, haveVideo=0
V/NuPlayer( 39): in instantiateDecoder at 693 audio = 0 
V/NuPlayer( 39): in instantiateDecoder at 693 audio = 1 
I/ESQueue ( 39): found AAC codec config (22050 Hz, 1 channels)
I/avc_utils( 39): found AVC codec config (192 x 144, Baseline-profile level 1.1)
V/MediaPlayer( 583): in getCurrentPosition at : 425
V/MediaPlayerService( 39): getCurrentPosition
V/MediaPlayerService( 39): [1] getCurrentPosition = 0
V/NuPlayer( 39): scanning sources haveAudio=0, haveVideo=0
V/NuPlayer( 39): in instantiateDecoder at 701 mime = video/avc
V/ACodec ( 39): Now uninitialized
V/ACodec ( 39): Now uninitialized
V/ACodec ( 39): onAllocateComponent
I/MediaPlayerService( 39): MediaPlayerService::getOMX()
V/SoftOMXPlugin( 39): makeComponentInstance 'OMX.google.h264.decoder'
V/SoftOMXPlugin( 39): makeComponentInstance at 106 
V/ACodec ( 39): onAllocateComponent
I/MediaPlayerService( 39): MediaPlayerService::getOMX()
V/SoftOMXPlugin( 39): makeComponentInstance at 128 
V/SoftOMXPlugin( 39): makeComponentInstance 'OMX.google.aac.decoder'
V/SoftOMXPlugin( 39): makeComponentInstance at 106 
V/SoftOMXPlugin( 39): makeComponentInstance at 128 
V/ACodec ( 39): [OMX.google.h264.decoder] Now Loaded
V/ACodec ( 39): onConfigureComponent
V/ACodec ( 39): configureCodec at 870 
V/ACodec ( 39): setupVideoDecoder at 1400 
V/ACodec ( 39): setupVideoDecoder at 1402 mime = video/avc 
V/ACodec ( 39): setupVideoDecoder at 1406 
V/ACodec ( 39): setupVideoDecoder at 1414 
V/ACodec ( 39): setupVideoDecoder at 1421 
V/ACodec ( 39): setupVideoDecoder at 1429 
V/ACodec ( 39): setupVideoDecoder at 1437 
V/ACodec ( 39): initNativeWindow at 1962 
V/ACodec ( 39): initNativeWindow at 1967 
E/OMXNodeInstance( 39): OMX_GetExtensionIndex failed
V/OMXNodeInstance( 39): enableGraphicBuffers at 301 OMX_GetExtensionIndex returned 2147487745
V/ACodec ( 39): onStart
V/ACodec ( 39): [OMX.google.h264.decoder] Now Loaded->Idle
4

3 回答 3

0

这是一个非常有趣的问题。从你的日志中,我想引用这部分

E/OMXNodeInstance( 39): OMX_GetExtensionIndex failed
V/OMXNodeInstance( 39): enableGraphicBuffers at 301 OMX_GetExtensionIndex returned 2147487745

这 2 条错误消息是在initNativeWindow调用 的过程中收到的ACodec,这是它从状态转换LOADED的一部分。IDLE从一个OMX角度来看,作为LOADED to IDLE过渡的一部分,ACodec::LoadedState::onConfigureComponent被调用。作为该函数的一部分,initNativeWindow被调用。

initNativeWindow中,有两个不同的条件。第一种情况是用户向编解码器提供了一个nativeWindow或者更确切地说是一个SurfaceSurfaceTexture来将其输出写入其中。另一种情况是当用户没有向引擎提供 aSurfaceMediaPlayer

V/ACodec ( 39): onStart
V/ACodec ( 39): [OMX.google.h264.decoder] Now Loaded->Idle

从这些日志中,可以观察到返回码initNativeWindow是正常的,这只有在控制分支到这里mNativeNativeWindow观察到的为 NULL的情况下才有可能。案例的返回代码没有被 捕获,这意味着组件成功转换到状态。falseACodecIDLE

简而言之,这个问题主要是由于Surface没有提供给MediaPlayer.

一些建议:

由于您正在使用NuPlayer,我建议您检查是否NuPlayer::setVideoSurfaceTexture调用了对象以及是否将non-NULL对象传递NuPlayer给下游组件。

从某个MediaPlayer角度来看,您应该将表面设置为setSurface调用的一部分。

一般来说,您需要提供一个sink用于视频解码器的链。

于 2013-04-03T01:06:42.923 回答
0

尝试在真实设备中运行它,因为我知道具有某些特定 sdk(如 3.1)的模拟器在播放 m3u8 文件时会崩溃。如果没有解决问题,也许你可以使用一些第三个插件,比如 Vitamio http://vitamio.org/

于 2013-04-02T12:24:08.490 回答
0
E/OMXNodeInstance( 39): OMX_GetExtensionIndex failed
V/OMXNodeInstance( 39): enableGraphicBuffers at 301 OMX_GetExtensionIndex returned 2147487745

对OMX_GetExtensionIndex的调用进入 SoftOMXComponent(此处),这只是一个存根函数并始终返回OMX_ErrorUndefined,这会导致enableGraphicBuffers失败

于 2013-04-19T06:36:41.273 回答