2011-12-22 155 views
5

我試圖發揮MP4視頻使用本地VideoView從服務器流,可悲的是我不斷收到一個「無法播放視頻」的錯誤。安卓:不能播放MP4視頻

奇怪的是,相同的視頻在Froyo上播放不錯,但不會在HoneyComb上播放。 我嘗試了與MX視頻播放器(在HC)相同的視頻,它播放就好了。

另一個主要問題是我無法對視頻進行重新編碼,因此我必須按照原樣使用這些視頻。

  • 什麼是造成錯誤?
  • 我該如何播放視頻?
  • 我應該找到一種方法將編解碼器庫包含到我的應用程序中嗎?

下面是logcat的細節:

E/MediaExtractor( 242): **********MediaExtractor::Create 
D/DivXPlugin( 241): DivXPlugin::onInitialize : 75 
D/DivXPlugin( 241): DivXPlugin::onSetOnInfoListener : 75 
D/DivXPlugin( 241): DivXPlugin::onOpenDecryptSession: Enter : 75 
E/DivXPlugin( 241): DivXPlugin::onOpenDecryptSession() Not a Divx File. 
E/DrmManager(Native)( 241): DrmManager::openDecryptSession: no capable plug-in found 
D/DivXPlugin( 241): DivXPlugin::onTerminate : 75 
E/MediaExtractor( 242): ************Autodetected media content as 'video/mpeg4' with confidence 0.40 
D/AwesomePlayer( 242): finishSetDataSource_l getDrmInfo 
D/AwesomePlayer( 242): setDataSource_l 
E/MPEG4Extractor( 242): ftyp chunk found 
D/MPEG4Extractor( 242): kKeyAVCC found 
E/MPEG4Extractor( 242): ERROR_MALFORMED because ret=-108 
E/MPEG4Extractor( 242): return ERROR_UNSUPPORTED 
E/MPEG4Extractor( 242): return ERROR_UNSUPPORTED 
D/AwesomePlayer( 242): UNKNOWN_ERROR: no Video and no Audio 
D/AwesomePlayer( 242): abortPrepare 
D/AwesomePlayer( 242): notifyListener_l 
E/MediaPlayer(3906): error (1, -2147483648) 
E/MediaPlayer(3906): Error (1,-2147483648) 
D/VideoView(3906): Error: 1,-2147483648 

而不能播放的視頻的規格:

 

    General 
    Format       : MPEG-4 
    Format profile     : Base Media 
    Codec ID       : isom 
    File size      : 60.7 MiB 
    Duration       : 7mn 3s 
    Overall bit rate mode   : Variable 
    Overall bit rate     : 1 201 Kbps 
    Writing application    : Lavf52.37.0 

    Video 
    ID        : 1 
    Format       : AVC 
    Format/Info      : Advanced Video Codec 
    Format profile     : [email protected] 
    Format settings, CABAC   : Yes 
    Format settings, ReFrames  : 4 frames 
    Codec ID       : avc1 
    Codec ID/Info     : Advanced Video Coding 
    Duration       : 7mn 3s 
    Duration_FirstFrame    : 40ms 
    Bit rate       : 1 072 Kbps 
    Width       : 1 024 pixels 
    Height       : 576 pixels 
    Display aspect ratio    : 16:9 
    Frame rate mode     : Constant 
    Frame rate      : 25.000 fps 
    Color space      : YUV 
    Chroma subsampling    : 4:2:0 
    Bit depth      : 8 bits 
    Scan type      : Progressive 
    Bits/(Pixel*Frame)    : 0.073 
    Stream size      : 54.2 MiB (89%) 
    Writing library     : x264 core 65 r0+1016 dbc5ef0 
    Encoding settings    : cabac=1/ref=4/deblock=1:0:0/analyse=0x3:0x113/me=umh/subme=8/psy_rd=1.0:0.0/mixed_ref=1/me_range=16/chroma_me=1/trellis=1/8x8dct=1/cqm=0/deadzone=21,11/chroma_qp_offset=-2/threads=6/nr=0/decimate=1/mbaff=0/bframes=16/b_pyramid=0/b_adapt=1/b_bias=0/direct=3/wpredb=1/keyint=125/keyint_min=25/scenecut=40(pre)/rc=2pass/bitrate=1072/ratetol=1.0/qcomp=0.80/qpmin=10/qpmax=51/qpstep=4/cplxblur=20.0/qblur=0.5/ip_ratio=1.41/pb_ratio=1.25/aq=1:1.00 
    Language       : English 

    Audio 
    ID        : 2 
    Format       : AAC 
    Format/Info      : Advanced Audio Codec 
    Format profile     : LC 
    Codec ID       : 40 
    Duration       : 7mn 3s 
    Bit rate mode     : Variable 
    Bit rate       : 122 Kbps 
    Channel(s)      : 2 channels 
    Channel positions    : Front: L R 
    Sampling rate     : 48.0 KHz 
    Compression mode     : Lossy 
    Stream size      : 6.18 MiB (10%) 
    Language       : English 

+0

我正在考慮添加ffmpeg庫到我的應用程序,但我對android NDK知之甚少。任何人都有提示或鏈接提供? – sebataz 2012-01-10 10:44:51

回答

0

一些Froyo的設備(例如,三星Galaxy Tab)使用的OpenCore媒體框架,而其他人使用Stagefright。從薑餅的所有設備到我的知識使用Stagefright。所以這可能可以解釋你的經驗。

通過HTTP或RSTP播放時,視頻容器還有其他限制。

從顯影劑文檔:

對於3GPP和MPEG-4容器,該MOOV原子必須先於任何的mdat原子 ,但必須成功的FTYP原子。

1

問題可能出在視頻編碼上。 Android FROYO和薑餅不支持除「基準」H264以外的H264格式。所以如果你的視頻是MP4 4 & H264編碼確保其「AVC基線」編碼。在Windows/Linux中使用一些工具,如「媒體信息」,並檢查您的視頻編碼。