2012-08-22 31 views
7

Tôi cố gắng phát nhiều video bằng vòng lặp bằng cách sử dụng MediaPlayer (Android ICS) và thay đổi video mỗi khi có sự kiện() được gọi.setVideoSurfaceTexture không thành công: -22 trong mediaplayer

Nó hoạt động rất tốt nhưng sau một thời gian ngẫu nhiên các ứng dụng đóng băng và tôi nhận được lỗi:

[SurfaceView] Kết nối: đã kết nối (hiện = 3, req = 3) setVideoSurfaceTexture thất bại: -22

Khi lỗi này xảy ra, nội nó gọi các cầu thủ reset

ref: mediaplayer.cpp

if (err != OK) { 
    LOGE("setVideoSurfaceTexture failed: %d", err); 
    // Note that we must do the reset before disconnecting from the ANW. 
    // Otherwise queue/dequeue calls could be made on the disconnected 
    // ANW, which may result in errors. 
    reset(); 
    disconnectNativeWindow(); 
    return err; 
} 

theo mã của tôi, tôi nhận được thông báo cho onprepared() và bắt đầu phát.

Thực ra không có phát lại do lỗi này. Vì vậy, tôi cố gắng để thiết lập lại mediaplayer và gọi chuẩn bị() khi vấn đề này xảy ra và mediaplayer không chơi, nhưng tôi không thể nắm bắt lỗi này (mp.isPlaying() -> true (bec'z gọi là bắt đầu() trong onprepared()).

tôi cố gắng logic như

onprepared() { 
    mp.start(); 
    if (pbm : [SurfaceView] connect : already connected (cur=3, req=3) 
             setVideoSurfaceTexture failed : -22 ) { 
     reset the mediaplayer source and call prepare 
    } 
} 

làm thế nào tôi có thể xác định vị trí lỗi này để khởi động MediaPlayer một lần nữa?

Trả lời

9

chúng ta có thể tránh được vấn đề này bằng cách sau. ..

mediaPlayer.setDisplay(null); 

    mediaPlayer.reset(); 

sau này thiết lập các surfaceholder một lần nữa trước khi bắt đầu MediaPlayer

mediaPlayer.setDisplay(surfaceHolder1); 

    mediaPlayer.start(); in onprepared notification. 
Các vấn đề liên quan