Android的MediaPlayer错误在使用MediaPlayer的时候,要注意几个Listener的配合使用,但是,MediaPlayer还是会
Android的MediaPlayer错误
在使用MediaPlayer的时候,要注意几个Listener的配合使用,但是,MediaPlayer还是会经常报些奇怪的错误信息。
通常这些错误都是由数据源或者调用MediaPlayer中的方法时没有注意MediaPlayer的状态而引起。
?
常见错误信息分析:
?
(-38,0)
一般是由于在MediaPlayer还没有Prepared的状态下调用了类似getDuration()之类的方法而引起,
例如报错:Attempt to call getDuration without a valid mediaplayer
?
?
?
以下是MediaPlayer的错误类型源码:
?* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
?* express or implied.
?* See the License for the specific language governing permissions
?* and limitations under the License.
?* -------------------------------
?*//**
?*? @file pv_return_codes.h
?*? @brief This file defines the general return and event codes to be used by PVMF elements.
?*???????? Theses base-level codes are unique. Error codes are negative values and informational
?*???????? codes are positive values.
?*? NOTE: If you add any new event, update the PVMFStatusToString method as well.
?*/#ifndef PVMF_RETURN_CODES_H_INCLUDED
#define PVMF_RETURN_CODES_H_INCLUDED#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
typedef int32 PVMFStatus;// Return codes
/*
?Return code for general success
?*/
const PVMFStatus PVMFSuccess = 1;
/*
?Return code for pending completion
?*/
const PVMFStatus PVMFPending = 0;
/*
?Return code for never set
?*/
const PVMFStatus PVMFNotSet = 2;
/*
?Return code for Command Complete
?*/
const PVMFStatus PVMFCmdCompleted = 3;
// Error codes (negative values)/*
?Definition of first error event in range (not an actual error code).
?*/
const PVMFStatus PVMFErrFirst = (-1);
/*
?Return code for general failure
?*/
const PVMFStatus PVMFFailure = (-1);
/*
?Error due to cancellation
?*/
const PVMFStatus PVMFErrCancelled = (-2);
/*
?Error due to no memory being available
?*/
const PVMFStatus PVMFErrNoMemory = (-3);
/*
?Error due to request not being supported
?*/
const PVMFStatus PVMFErrNotSupported = (-4);
/*
?Error due to invalid argument
?*/
const PVMFStatus PVMFErrArgument = (-5);
/*
?Error due to invalid resource handle being specified
?*/
const PVMFStatus PVMFErrBadHandle = (-6);
/*
?Error due to resource already exists and another one cannot be created
?*/
const PVMFStatus PVMFErrAlreadyExists = (-7);
/*
?Error due to resource being busy and request cannot be handled
?*/
const PVMFStatus PVMFErrBusy = (-8);
/*
?Error due to resource not ready to accept request
?*/
const PVMFStatus PVMFErrNotReady = (-9);
/*
?Error due to data corruption being detected
?*/
const PVMFStatus PVMFErrCorrupt = (-10);
/*
?Error due to request timing out
?*/
const PVMFStatus PVMFErrTimeout = (-11);
/*
?Error due to general overflow
?*/
const PVMFStatus PVMFErrOverflow = (-12);
/*
?Error due to general underflow
?*/
const PVMFStatus PVMFErrUnderflow = (-13);
/*
?Error due to resource being in wrong state to handle request
?*/
const PVMFStatus PVMFErrInvalidState = (-14);
/*
?Error due to resource not being available
?*/
const PVMFStatus PVMFErrNoResources = (-15);
/*
?Error due to invalid configuration of resource
?*/
const PVMFStatus PVMFErrResourceConfiguration = (-16);
/*
?Error due to general error in underlying resource
?*/
const PVMFStatus PVMFErrResource = (-17);
/*
?Error due to general data processing
?*/
const PVMFStatus PVMFErrProcessing = (-18);
/*
?Error due to general port processing
?*/
const PVMFStatus PVMFErrPortProcessing = (-19);
/*
?Error due to lack of authorization to access a resource.
?*/
const PVMFStatus PVMFErrAccessDenied = (-20);
/*
?Unused error code.? Can be re-defined.
?*/
const PVMFStatus PVMFErrUnused_01 = (-21);
/*
?Unused error code.? Can be re-defined.
?*/
const PVMFStatus PVMFErrUnused_02 = (-22);
/*
?Error due to the download content length larger than the maximum request size
?*/
const PVMFStatus PVMFErrContentTooLarge = (-23);
/*
?Error due to a maximum number of objects in use
?*/
const PVMFStatus PVMFErrMaxReached = (-24);
/*
?Return code for low disk space
?*/
const PVMFStatus PVMFLowDiskSpace = (-25);
/*
?Error due to the requirement of user-id and password input from app for HTTP basic/digest authentication
?*/
const PVMFStatus PVMFErrHTTPAuthenticationRequired = (-26);
/*
?PVMFMediaClock specific error. Callback has become invalid due to change in direction of NPT clock.
*/
const PVMFStatus PVMFErrCallbackHasBecomeInvalid = (-27);
/*
?PVMFMediaClock specific error. Callback is called as clock has stopped.
*/
const PVMFStatus PVMFErrCallbackClockStopped = (-28);
/*
?Error due to missing call for ReleaseMatadataValue() API
?*/
const PVMFStatus PVMFErrReleaseMetadataValueNotDone = (-29);
/*
?Error due to the redirect error
*/
const PVMFStatus PVMFErrRedirect = (-30);
/*
?Error if a given method or API is not implemented. This is NOT the same as PVMFErrNotSupported.
*/
const PVMFStatus PVMFErrNotImplemented = (-31);/*
DRM license not found
*/
const PVMFStatus PVMFErrDrmLicenseNotFound = (-32);
/*
DRM license has expired due to end time or usage count restriction
*/
const PVMFStatus PVMFErrDrmLicenseExpired = (-33);
/*
DRM license has a start time restriction and current time is too early
*/
const PVMFStatus PVMFErrDrmLicenseNotYetValid = (-34);
/*
DRM rights are insufficient for the requested operation
*/
const PVMFStatus PVMFErrDrmInsufficientRights = (-35);
/*
DRM rights require higher output protection level than supported by the device
*/
const PVMFStatus PVMFErrDrmOutputProtectionLevel = (-36);
/*
DRM clock rollback detected.
*/
const PVMFStatus PVMFErrDrmClockRollback = (-37);
/*
DRM clock is not available or cannot be read
*/
const PVMFStatus PVMFErrDrmClockError = (-38);
/*
DRM license store is corrupted
*/
const PVMFStatus PVMFErrDrmLicenseStoreCorrupt = (-39);
/*
DRM license store is not valid for the device.
*/
const PVMFStatus PVMFErrDrmLicenseStoreInvalid = (-40);
/*
DRM license store access failed
*/
const PVMFStatus PVMFErrDrmLicenseStoreAccess = (-41);
/*
DRM Device data access failed
*/
const PVMFStatus PVMFErrDrmDeviceDataAccess = (-42);
/*
DRM network error occurred in server communication
*/
const PVMFStatus PVMFErrDrmNetworkError = (-43);
/*
DRM device ID cannot be determined
*/
const PVMFStatus PVMFErrDrmDeviceIDUnavailable = (-44);
/*
DRM data is not matched to device
*/
const PVMFStatus PVMFErrDrmDeviceDataMismatch = (-45);
/*
DRM cryptography operation failed
*/
const PVMFStatus PVMFErrDrmCryptoError = (-46);
/*
DRM license not found, but a preview of the content is available.
*/
const PVMFStatus PVMFErrDrmLicenseNotFoundPreviewAvailable = (-47);
/*
Error due to unable to communicate with server
*/
const PVMFStatus PVMFErrDrmServerError = (-48);
/*
Error when a license server requests registration to a domain.
*/
const PVMFStatus PVMFErrDrmDomainRequired = (-49);
/*
Error when a license server requests renewal of a domain registration.
*/
const PVMFStatus PVMFErrDrmDomainRenewRequired = (-50);
/*
Error when a license server reports that the device is not part of the domain.
*/
const PVMFStatus PVMFErrDrmDomainNotAMember = (-51);
/*
Error due to device currently not activated for drm-protected content playback
*/
const PVMFStatus PVMFErrDrmDeviceNotActivated = (-52);
/*
The metering certificate was not found in the store.
*/
const PVMFStatus PVMFErrDrmMeterCertNotFound = (-53);
/*
Service specific server error.
*/
const PVMFStatus PVMFErrDrmServerServiceSpecific = (-54);
/*
An internal server error occurred.
*/
const PVMFStatus PVMFErrDrmServerInternalError = (-55);
/*
The device limit for the domain has been reached.
*/
const PVMFStatus PVMFErrDrmServerDeviceLimitReached = (-56);
/*
The metering identifier is unknown.
*/
const PVMFStatus PVMFErrDrmServerUnknownMeteringID = (-57);
/*
The computer limit for the domain has been reached.
*/
const PVMFStatus PVMFErrDrmServerComputerLimitReached = (-58);
/*
The protocol version specified was not supported by the server.
*/
const PVMFStatus PVMFErrDrmServerProtocolVersionMismatch = (-59);
/*
The account identifier is unknown.
*/
const PVMFStatus PVMFErrDrmServerUnknownAccountID = (-60);
/*
Server redirected request to different server due to protocol mismatch.
*/
const PVMFStatus PVMFErrDrmServerProtocolRedirect = (-61);
/*
*//*
... this range reserved for future DRM-related errors
*/
/*
DRM Operational Error not otherwise specified
*/
const PVMFStatus PVMFErrDrmOperationFailed = (-81);
/*
Error returned when the video container is not valid for progressive playback.
*/
const PVMFStatus PVMFErrContentInvalidForProgressivePlayback = (-82);/*
RTSP Error codes
*/
const PVMFStatus PVMFErrRTSP400BadRequest = (-83);
const PVMFStatus PVMFErrRTSP401Unauthorized = (-84);
const PVMFStatus PVMFErrRTSP402CodePaymentRequired = (-85);
const PVMFStatus PVMFErrRTSP403Forbidden = (-86);
const PVMFStatus PVMFErrRTSP404NotFound = (-87);
const PVMFStatus PVMFErrRTSP405MethodNotAllowed = (-88);
const PVMFStatus PVMFErrRTSP406NotAcceptable = (-89);
const PVMFStatus PVMFErrRTSP407ProxyAuthenticationRequired = (-90);
const PVMFStatus PVMFErrRTSP408RequestTimeOut = (-91);const PVMFStatus PVMFErrRTSP410Gone = (-92);
const PVMFStatus PVMFErrRTSP411LengthRequired = (-93);
const PVMFStatus PVMFErrRTSP412PreconditionFailed = (-94);
const PVMFStatus PVMFErrRTSP413RequestEntityTooLarge = (-95);
const PVMFStatus PVMFErrRTSP414RequestURITooLarge = (-96);
const PVMFStatus PVMFErrRTSP415UnsupportedMediaType = (-97);const PVMFStatus PVMFErrRTSP451ParameterNotUnderstood = (-98);
const PVMFStatus PVMFErrRTSP452ConferenceNotFound = (-99);
const PVMFStatus PVMFErrRTSP453NotEnoughBandwidth = (-100);
const PVMFStatus PVMFErrRTSP454SessionNotFound = (-101);
const PVMFStatus PVMFErrRTSP455MethodNotValidInThisState = (-102);
const PVMFStatus PVMFErrRTSP456HeaderFieldNotValidForResource = (-103);
const PVMFStatus PVMFErrRTSP457InvalidRange = (-104);
const PVMFStatus PVMFErrRTSP458ParameterIsReadOnly = (-105);
const PVMFStatus PVMFErrRTSP459AggregateOperationNotAllowed = (-106);
const PVMFStatus PVMFErrRTSP460OnlyAggregateOperationAllowed = (-107);
const PVMFStatus PVMFErrRTSP461UnsupportedTransport = (-108);
const PVMFStatus PVMFErrRTSP462DestinationUnreachable = (-109);
const PVMFStatus PVMFErrRTSP480UnsupportedClient = (-110);const PVMFStatus PVMFErrRTSP500InternalServerError = (-111);
const PVMFStatus PVMFErrRTSP501NotImplemented = (-112);
const PVMFStatus PVMFErrRTSP502BadGateway = (-113);
const PVMFStatus PVMFErrRTSP503ServiceUnavailable = (-114);
const PVMFStatus PVMFErrRTSP504GatewayTimeout = (-115);
const PVMFStatus PVMFErrRTSP505RTSPVersionNotSupported = (-116);const PVMFStatus PVMFErrRTSP551OptionNotSupported = (-117);
/*
Reserve for future error code extensions
*/
const PVMFStatus PVMFErrRTSPExtensionCode = (-137);/*
?Placeholder for last event in range.
?*/
const PVMFStatus PVMFErrLast = (-137);
/*
?Macro to tell if a value is in PVMFErr range
?*/
#define IsPVMFErrCode(s) ((PVMFErrLast<=s)&&(s<=PVMFErrFirst))// Informational codes (positive values)const PVMFStatus PVMFInfoFirst = 10;/*
?Notification that a port was created
?*/
const PVMFStatus PVMFInfoPortCreated = 10;
/*
?Notification that a port was deleted
?*/
const PVMFStatus PVMFInfoPortDeleted = 11;
/*
?Notification that a port was connected
?*/
const PVMFStatus PVMFInfoPortConnected = 12;
/*
?Notification that a port was disconnected
?*/
const PVMFStatus PVMFInfoPortDisconnected = 13;
/*
?Notification that an overflow occurred (not fatal error)
?*/
const PVMFStatus PVMFInfoOverflow = 14;
/*
?Notification that an underflow occurred (not fatal error)
?*/
const PVMFStatus PVMFInfoUnderflow = 15;
/*
?Notification that a processing failure occurred (not fatal error)
?*/
const PVMFStatus PVMFInfoProcessingFailure = 16;
/*
?Notification that end of data stream has been reached
?*/
const PVMFStatus PVMFInfoEndOfData = 17;
/*
?Notification that a data buffer has been created
?*/
const PVMFStatus PVMFInfoBufferCreated = 18;
/*
?Notification that buffering of data has started
?*/
const PVMFStatus PVMFInfoBufferingStart = 19;
/*
?Notification for data buffering level status
?*/
const PVMFStatus PVMFInfoBufferingStatus = 20;
/*
?Notification that data buffering has completed
?*/
const PVMFStatus PVMFInfoBufferingComplete = 21;
/*
?Notification that data is ready for use
?*/
const PVMFStatus PVMFInfoDataReady = 22;
/*
?Notification for position status
?*/
const PVMFStatus PVMFInfoPositionStatus = 23;
/*
?Notification for node state change
?*/
const PVMFStatus PVMFInfoStateChanged = 24;
/*
?Notification that data was discarded during synchronization.
?*/
const PVMFStatus PVMFInfoDataDiscarded = 25;
/*
?Notification that error handling has started
?*/
const PVMFStatus PVMFInfoErrorHandlingStart = 26;
/*
?Notification that error handling has completed
?*/
const PVMFStatus PVMFInfoErrorHandlingComplete = 27;
/*
?Notification from a remote source
?*/
const PVMFStatus PVMFInfoRemoteSourceNotification = 28;
/*
?Notification that license acquisition has started.
?*/
const PVMFStatus PVMFInfoLicenseAcquisitionStarted = 29;
/*
?Notification that download content length is available
?*/
const PVMFStatus PVMFInfoContentLength = 30;
/*
?Notification that downloaded content reaches the maximum request size, and will
?be truncated, especially for the case of unavailable content length
?*/
const PVMFStatus PVMFInfoContentTruncated = 31;
/*
?Notification that source format is not supported, typically sent
?during protocol rollover
?*/
const PVMFStatus PVMFInfoSourceFormatNotSupported = 32;
/*
?Notification that a clip transition has occurred while playing a playlist
?*/
const PVMFStatus PVMFInfoPlayListClipTransition = 33;
/*
?Notification that content type for download or HTTP streaming is available
?*/
const PVMFStatus PVMFInfoContentType = 34;
/*
?Notification that paticular track is disable. This one is on a per track basis.
?*/
const PVMFStatus PVMFInfoTrackDisable = 35;
/*
?Notification that unexpected data has been obtained, especially for download,
?when client receives from server more data than requested in content-length header
?*/
const PVMFStatus PVMFInfoUnexpectedData = 36;
/*
?Notification that server discnnect happens after download is complete
?*/
const PVMFStatus PVMFInfoSessionDisconnect = 37;
/*
?Notification that new meadi stream has been started
?*/
const PVMFStatus PVMFInfoStartOfData = 38;
/*
?Notification that node has processed a command with ReportObserver marker info
?*/
const PVMFStatus PVMFInfoReportObserverRecieved = 39;
/*
?Notification that meta data is available with source node
?*/
const PVMFStatus PVMFInfoMetadataAvailable = 40;
/*
?Notification that duration is available with source node
?*/
const PVMFStatus PVMFInfoDurationAvailable = 41;
/*
?Notification that Change Position request not supported
?*/
const PVMFStatus PVMFInfoChangePlaybackPositionNotSupported = 42;
/*
?Notification that the content is poorly inter-leaved
?*/
const PVMFStatus PVMFInfoPoorlyInterleavedContent = 43;
/*
?Notification for actual playback position after repositioning
?*/
const PVMFStatus PVMFInfoActualPlaybackPosition = 44;
/*
?Notification that the live buffer is empty
?*/
const PVMFStatus PVMFInfoLiveBufferEmpty = 45;
/*
?Notification that a server has responded with 200 OK to a Playlist play request
?*/
const PVMFStatus PVMFInfoPlayListSwitch = 46;
/*
?Notification of configuration complete
?*/
const PVMFStatus PVMFMIOConfigurationComplete = 47;
/*
?Notification that the video track is falling behind
?*/
const PVMFStatus PVMFInfoVideoTrackFallingBehind = 48;
/*
?Notification that memory is not available for new RTP packets
?*/
const PVMFStatus PVMFInfoSourceOverflow = 49;
/*
?Notification for Media data length in shoutcast session
?*/
const PVMFStatus PVMFInfoShoutcastMediaDataLength = 50;
/*
?Notification for clip bitrate in shoutcast session
?*/
const PVMFStatus PVMFInfoShoutcastClipBitrate = 51;
/*
?Notification for shoutcast session
?*/
const PVMFStatus PVMFInfoIsShoutcastSesssion = 52;
/*
?Notification that the engine must select tracks (for e.g. during a 3GPP FCS)
?*/
const PVMFStatus PVMFInfoTrackSelectionNeeded = 53;
/*
?Notification for corrupted clip during playlist playback
?*/
const PVMFStatus PVMFInfoClipCorrupted = 54;
/*
?Notification that source format has been updated
?*/
const PVMFStatus PVMFInfoSourceFormatUpdated = 55;
/*
Notification for invalid ts in the RTP packet
*/
const PVMFStatus PVMFErrInvalidRTPTimeInPkt = 56;
/*
?Notification that pvmiGetBufferAllocatorSpecificInfoSync was unsuccessful
?*/
const PVMFStatus PVMFPvmiBufferAllocatorNotAcquired = 55;
/*
?Notification that pvmiGetBufferAllocatorSpecificInfoSync was successful
?*/
const PVMFStatus PVMFPvmiBufferAlloctorAcquired = 56;/*
?Placeholder for end of range
?*/
const PVMFStatus PVMFInfoLast = 100;
/*
?Macro to tell if a code is in PVMFInfo range
?*/
#define IsPVMFInfoCode(s) ((PVMFInfoFirst<=s)&&(s<=PVMFInfoLast))// Convert a PVMFStatus code to a string that can be used in logs.
// @param status code.
// @return a human readable string representing the status.
OSCL_IMPORT_REF const char *PVMFStatusToString(const PVMFStatus status);#endif