mirror of https://github.com/FongMi/TV.git
parent
c4b78a2164
commit
9acb3a85b5
@ -0,0 +1,74 @@ |
||||
package com.fongmi.android.tv.player.exo; |
||||
|
||||
import android.content.res.Resources; |
||||
|
||||
import androidx.media3.common.PlaybackException; |
||||
import androidx.media3.exoplayer.mediacodec.MediaCodecRenderer; |
||||
import androidx.media3.exoplayer.mediacodec.MediaCodecUtil; |
||||
|
||||
import com.fongmi.android.tv.App; |
||||
import com.fongmi.android.tv.R; |
||||
|
||||
public class ErrorMsgProvider { |
||||
|
||||
private final Resources resources; |
||||
|
||||
public ErrorMsgProvider() { |
||||
this.resources = App.get().getResources(); |
||||
} |
||||
|
||||
public String get(PlaybackException e) { |
||||
if (e.getCause() instanceof MediaCodecRenderer.DecoderInitializationException e2) return custom(e2); |
||||
return resources.getString(getId(e.errorCode)); |
||||
} |
||||
|
||||
private String custom(MediaCodecRenderer.DecoderInitializationException e) { |
||||
if (e.codecInfo != null) return resources.getString(R.string.error_instantiating_decoder, e.codecInfo.name); |
||||
if (e.getCause() instanceof MediaCodecUtil.DecoderQueryException) return resources.getString(R.string.error_querying_decoders); |
||||
else if (e.secureDecoderRequired) return resources.getString(R.string.error_no_secure_decoder, e.mimeType); |
||||
else return resources.getString(R.string.error_no_decoder, e.mimeType); |
||||
} |
||||
|
||||
private int getId(int errorCode) { |
||||
return switch (errorCode) { |
||||
case PlaybackException.ERROR_CODE_REMOTE_ERROR -> R.string.error_remote_error; |
||||
case PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW -> R.string.error_behind_live_window; |
||||
case PlaybackException.ERROR_CODE_TIMEOUT -> R.string.error_timeout; |
||||
case PlaybackException.ERROR_CODE_FAILED_RUNTIME_CHECK -> R.string.error_failed_runtime_check; |
||||
case PlaybackException.ERROR_CODE_IO_UNSPECIFIED -> R.string.error_io_unspecified; |
||||
case PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED -> R.string.error_io_network_connection_failed; |
||||
case PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT -> R.string.error_io_network_connection_timeout; |
||||
case PlaybackException.ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE -> R.string.error_io_invalid_http_content_type; |
||||
case PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> R.string.error_io_bad_http_status; |
||||
case PlaybackException.ERROR_CODE_IO_FILE_NOT_FOUND -> R.string.error_io_file_not_found; |
||||
case PlaybackException.ERROR_CODE_IO_NO_PERMISSION -> R.string.error_io_no_permission; |
||||
case PlaybackException.ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED -> R.string.error_io_cleartext_not_permitted; |
||||
case PlaybackException.ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE -> R.string.error_io_read_position_out_of_range; |
||||
case PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED -> R.string.error_parsing_container_malformed; |
||||
case PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED -> R.string.error_parsing_manifest_malformed; |
||||
case PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED -> R.string.error_parsing_container_unsupported; |
||||
case PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED -> R.string.error_parsing_manifest_unsupported; |
||||
case PlaybackException.ERROR_CODE_DECODER_INIT_FAILED -> R.string.error_decoder_init_failed; |
||||
case PlaybackException.ERROR_CODE_DECODER_QUERY_FAILED -> R.string.error_decoder_query_failed; |
||||
case PlaybackException.ERROR_CODE_DECODING_FAILED -> R.string.error_decoding_failed; |
||||
case PlaybackException.ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES -> R.string.error_decoding_format_exceeds_capabilities; |
||||
case PlaybackException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED -> R.string.error_decoding_format_unsupported; |
||||
case PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED -> R.string.error_decoding_resources_reclaimed; |
||||
case PlaybackException.ERROR_CODE_AUDIO_TRACK_INIT_FAILED -> R.string.error_audio_track_init_failed; |
||||
case PlaybackException.ERROR_CODE_AUDIO_TRACK_WRITE_FAILED -> R.string.error_audio_track_write_failed; |
||||
case PlaybackException.ERROR_CODE_AUDIO_TRACK_OFFLOAD_WRITE_FAILED -> R.string.error_audio_track_offload_write_failed; |
||||
case PlaybackException.ERROR_CODE_AUDIO_TRACK_OFFLOAD_INIT_FAILED -> R.string.error_audio_track_offload_init_failed; |
||||
case PlaybackException.ERROR_CODE_DRM_UNSPECIFIED -> R.string.error_drm_unspecified; |
||||
case PlaybackException.ERROR_CODE_DRM_PROVISIONING_FAILED -> R.string.error_drm_provisioning_failed; |
||||
case PlaybackException.ERROR_CODE_DRM_CONTENT_ERROR -> R.string.error_drm_content_error; |
||||
case PlaybackException.ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED -> R.string.error_drm_license_acquisition_failed; |
||||
case PlaybackException.ERROR_CODE_DRM_DISALLOWED_OPERATION -> R.string.error_drm_disallowed_operation; |
||||
case PlaybackException.ERROR_CODE_DRM_SYSTEM_ERROR -> R.string.error_drm_system_error; |
||||
case PlaybackException.ERROR_CODE_DRM_DEVICE_REVOKED -> R.string.error_drm_device_revoked; |
||||
case PlaybackException.ERROR_CODE_DRM_LICENSE_EXPIRED -> R.string.error_drm_license_expired; |
||||
case PlaybackException.ERROR_CODE_VIDEO_FRAME_PROCESSOR_INIT_FAILED -> R.string.error_video_frame_processor_init_failed; |
||||
case PlaybackException.ERROR_CODE_VIDEO_FRAME_PROCESSING_FAILED -> R.string.error_video_frame_processing_failed; |
||||
default -> R.string.error_unspecified; |
||||
}; |
||||
} |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto"> |
||||
<string name="error_unspecified">发生未预期的错误</string> |
||||
<string name="error_remote_error">发生远程错误</string> |
||||
<string name="error_behind_live_window">已落后直播流过多</string> |
||||
<string name="error_timeout">操作超时</string> |
||||
<string name="error_failed_runtime_check">发生内部播放器错误</string> |
||||
<string name="error_io_unspecified">发生未知的 I/O 错误</string> |
||||
<string name="error_io_network_connection_failed">网络连接失败</string> |
||||
<string name="error_io_network_connection_timeout">网络连接超时</string> |
||||
<string name="error_io_invalid_http_content_type">无效的服务器响应</string> |
||||
<string name="error_io_bad_http_status">无法连接至服务器</string> |
||||
<string name="error_io_file_not_found">找不到文件</string> |
||||
<string name="error_io_no_permission">I/O 权限不足</string> |
||||
<string name="error_io_cleartext_not_permitted">此内容需要安全的网络连接</string> |
||||
<string name="error_io_read_position_out_of_range">读取源数据失败</string> |
||||
<string name="error_parsing_container_malformed">媒体文件已损坏或格式不受支持</string> |
||||
<string name="error_parsing_manifest_malformed">流清单无效</string> |
||||
<string name="error_parsing_container_unsupported">不支持此媒体容器格式</string> |
||||
<string name="error_parsing_manifest_unsupported">不支持此流清单格式</string> |
||||
<string name="error_decoder_init_failed">初始化媒体解码器失败</string> |
||||
<string name="error_decoder_query_failed">找不到适合此格式的媒体解码器</string> |
||||
<string name="error_decoding_failed">解码媒体时发生错误</string> |
||||
<string name="error_decoding_format_exceeds_capabilities">媒体画质超过设备能力上限</string> |
||||
<string name="error_decoding_format_unsupported">此设备不支持该媒体格式</string> |
||||
<string name="error_decoding_resources_reclaimed">解码资源已被系统回收</string> |
||||
<string name="error_audio_track_init_failed">初始化音轨失败</string> |
||||
<string name="error_audio_track_write_failed">写入音频数据失败</string> |
||||
<string name="error_audio_track_offload_write_failed">写入 Offload 音频数据失败</string> |
||||
<string name="error_audio_track_offload_init_failed">初始化 Offload 音轨失败</string> |
||||
<string name="error_drm_unspecified">发生未知的 DRM 错误</string> |
||||
<string name="error_drm_provisioning_failed">设置设备 DRM 失败</string> |
||||
<string name="error_drm_content_error">受保护的内容发生错误</string> |
||||
<string name="error_drm_license_acquisition_failed">获取内容授权失败</string> |
||||
<string name="error_drm_disallowed_operation">不允许此 DRM 操作</string> |
||||
<string name="error_drm_system_error">发生 DRM 系统错误</string> |
||||
<string name="error_drm_device_revoked">此设备的内容访问权已被撤销</string> |
||||
<string name="error_drm_license_expired">内容授权已过期</string> |
||||
<string name="error_video_frame_processor_init_failed">初始化视频帧处理器失败</string> |
||||
<string name="error_video_frame_processing_failed">处理视频帧时发生错误</string> |
||||
<string name="error_no_decoder">此设备未提供 <xliff:g id="mime_type">%1$s</xliff:g> 格式的解码器</string> |
||||
<string name="error_no_secure_decoder">此设备未提供 <xliff:g id="mime_type">%1$s</xliff:g> 格式的安全解码器</string> |
||||
<string name="error_querying_decoders">无法查询设备的解码器</string> |
||||
<string name="error_instantiating_decoder">无法将解码器 <xliff:g id="decoder_name">%1$s</xliff:g> 实例化</string> |
||||
</resources> |
||||
@ -0,0 +1,44 @@ |
||||
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto"> |
||||
<string name="error_unspecified">發生未預期的錯誤</string> |
||||
<string name="error_remote_error">發生遠端錯誤</string> |
||||
<string name="error_behind_live_window">已落後直播串流過多</string> |
||||
<string name="error_timeout">操作逾時</string> |
||||
<string name="error_failed_runtime_check">發生內部播放器錯誤</string> |
||||
<string name="error_io_unspecified">發生未知的 I/O 錯誤</string> |
||||
<string name="error_io_network_connection_failed">網路連線失敗</string> |
||||
<string name="error_io_network_connection_timeout">網路連線逾時</string> |
||||
<string name="error_io_invalid_http_content_type">無效的伺服器回應</string> |
||||
<string name="error_io_bad_http_status">無法連接至伺服器</string> |
||||
<string name="error_io_file_not_found">找不到檔案</string> |
||||
<string name="error_io_no_permission">I/O 權限不足</string> |
||||
<string name="error_io_cleartext_not_permitted">此內容需要安全的網路連線</string> |
||||
<string name="error_io_read_position_out_of_range">讀取來源資料失敗</string> |
||||
<string name="error_parsing_container_malformed">媒體檔案已損毀或格式不受支援</string> |
||||
<string name="error_parsing_manifest_malformed">串流清單無效</string> |
||||
<string name="error_parsing_container_unsupported">不支援此媒體容器格式</string> |
||||
<string name="error_parsing_manifest_unsupported">不支援此串流清單格式</string> |
||||
<string name="error_decoder_init_failed">初始化媒體解碼器失敗</string> |
||||
<string name="error_decoder_query_failed">找不到適合此格式的媒體解碼器</string> |
||||
<string name="error_decoding_failed">解碼媒體時發生錯誤</string> |
||||
<string name="error_decoding_format_exceeds_capabilities">媒體品質超過裝置能力上限</string> |
||||
<string name="error_decoding_format_unsupported">此裝置不支援該媒體格式</string> |
||||
<string name="error_decoding_resources_reclaimed">解碼資源已被系統收回</string> |
||||
<string name="error_audio_track_init_failed">初始化音軌失敗</string> |
||||
<string name="error_audio_track_write_failed">寫入音訊資料失敗</string> |
||||
<string name="error_audio_track_offload_write_failed">寫入 Offload 音訊資料失敗</string> |
||||
<string name="error_audio_track_offload_init_failed">初始化 Offload 音軌失敗</string> |
||||
<string name="error_drm_unspecified">發生未知的 DRM 錯誤</string> |
||||
<string name="error_drm_provisioning_failed">設定裝置 DRM 失敗</string> |
||||
<string name="error_drm_content_error">受保護的內容發生錯誤</string> |
||||
<string name="error_drm_license_acquisition_failed">取得內容授權失敗</string> |
||||
<string name="error_drm_disallowed_operation">不允許此 DRM 操作</string> |
||||
<string name="error_drm_system_error">發生 DRM 系統錯誤</string> |
||||
<string name="error_drm_device_revoked">此裝置的內容存取權已被撤銷</string> |
||||
<string name="error_drm_license_expired">內容授權已過期</string> |
||||
<string name="error_video_frame_processor_init_failed">初始化影片影格處理器失敗</string> |
||||
<string name="error_video_frame_processing_failed">處理影片影格時發生錯誤</string> |
||||
<string name="error_no_decoder">此裝置未提供 <xliff:g id="mime_type">%1$s</xliff:g> 格式的解碼器</string> |
||||
<string name="error_no_secure_decoder">此裝置未提供 <xliff:g id="mime_type">%1$s</xliff:g> 格式的安全解碼器</string> |
||||
<string name="error_querying_decoders">無法查詢裝置的解碼器</string> |
||||
<string name="error_instantiating_decoder">無法將解碼器 <xliff:g id="decoder_name">%1$s</xliff:g> 實例化</string> |
||||
</resources> |
||||
@ -0,0 +1,44 @@ |
||||
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto"> |
||||
<string name="error_unspecified">An unexpected error occurred</string> |
||||
<string name="error_remote_error">A remote error occurred</string> |
||||
<string name="error_behind_live_window">Fell too far behind the live stream</string> |
||||
<string name="error_timeout">The operation timed out</string> |
||||
<string name="error_failed_runtime_check">An internal player error occurred</string> |
||||
<string name="error_io_unspecified">An unknown I/O error occurred</string> |
||||
<string name="error_io_network_connection_failed">Network connection failed</string> |
||||
<string name="error_io_network_connection_timeout">Network connection timed out</string> |
||||
<string name="error_io_invalid_http_content_type">Invalid server response</string> |
||||
<string name="error_io_bad_http_status">Unable to connect to the server</string> |
||||
<string name="error_io_file_not_found">File not found</string> |
||||
<string name="error_io_no_permission">I/O permission denied</string> |
||||
<string name="error_io_cleartext_not_permitted">A secure connection is required for this content</string> |
||||
<string name="error_io_read_position_out_of_range">Failed to read data from the source</string> |
||||
<string name="error_parsing_container_malformed">The media file is corrupted or in an unsupported format</string> |
||||
<string name="error_parsing_manifest_malformed">The stream manifest is invalid</string> |
||||
<string name="error_parsing_container_unsupported">The media container format is not supported</string> |
||||
<string name="error_parsing_manifest_unsupported">The stream manifest format is not supported</string> |
||||
<string name="error_decoder_init_failed">Failed to initialize the media decoder</string> |
||||
<string name="error_decoder_query_failed">Failed to find a suitable media decoder for the format</string> |
||||
<string name="error_decoding_failed">An error occurred while decoding the media</string> |
||||
<string name="error_decoding_format_exceeds_capabilities">The media quality exceeds the device\'s capabilities</string> |
||||
<string name="error_decoding_format_unsupported">The media format is not supported by this device</string> |
||||
<string name="error_decoding_resources_reclaimed">Decoding resources were reclaimed by the system</string> |
||||
<string name="error_audio_track_init_failed">Failed to initialize the audio track</string> |
||||
<string name="error_audio_track_write_failed">Failed to write audio data</string> |
||||
<string name="error_audio_track_offload_write_failed">Failed to write offloaded audio data</string> |
||||
<string name="error_audio_track_offload_init_failed">Failed to initialize the offloaded audio track</string> |
||||
<string name="error_drm_unspecified">An unknown DRM error occurred</string> |
||||
<string name="error_drm_provisioning_failed">Failed to configure DRM on this device</string> |
||||
<string name="error_drm_content_error">An error occurred with the protected content</string> |
||||
<string name="error_drm_license_acquisition_failed">Failed to acquire the content license</string> |
||||
<string name="error_drm_disallowed_operation">The requested DRM operation is not allowed</string> |
||||
<string name="error_drm_system_error">A DRM system error occurred</string> |
||||
<string name="error_drm_device_revoked">Access to this content has been revoked for this device</string> |
||||
<string name="error_drm_license_expired">The content license has expired</string> |
||||
<string name="error_video_frame_processor_init_failed">Failed to initialize the video frame processor</string> |
||||
<string name="error_video_frame_processing_failed">An error occurred while processing a video frame</string> |
||||
<string name="error_no_decoder">This device does not provide a decoder for <xliff:g id="mime_type">%1$s</xliff:g></string> |
||||
<string name="error_no_secure_decoder">This device does not provide a secure decoder for <xliff:g id="mime_type">%1$s</xliff:g></string> |
||||
<string name="error_querying_decoders">Unable to query device decoders</string> |
||||
<string name="error_instantiating_decoder">Unable to instantiate decoder <xliff:g id="decoder_name">%1$s</xliff:g></string> |
||||
</resources> |
||||
Loading…
Reference in new issue