[英]When trying to play a video from url in a videoview, I get a FileNotFoundException: No content provider error on SOME phones
我在服務器上有一個視頻,我想在視頻中播放。
在我的LG G專業版(4.1.2)上,它就像一個魅力,但它不適用於舊的nexus(4.1.2)和HTC Desire X(android 4.0.4)
這是我的代碼:
videoUrl = video.getUrl();
Uri videoUri = Uri.parse(videoUrl);
vvVideoFullscreen.setVideoURI(videoUri);
video.getUrl()返回以下字符串:
http://sdf.mysite.com/upload/video/456456.mp4
非常直截了當。 我該怎么辦?
我被告知視頻文件具有正確的mp4壓縮格式:h.264基線,如http://developer.android.com/guide/appendix/media-formats.html所述
這是錯誤日志:
D/MediaPlayer(3963): setDataSource(Context context, http://sdf.mysite.com/upload/video/456456.mp4, Map<String, String> headers) in
E/MediaPlayer(3963): java.io.FileNotFoundException: No content provider: http://sdf.mysite.com/upload/video/456456.mp4
V/MediaPlayer(3963): network type=wifi
此外,我嘗試通過這種方式播放視頻:
Uri videoUri = Uri.parse(videoUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, videoUri);
intent.setDataAndType(videoUri, "video/mp4");
startActivity(intent);
但是我得到了以下日志消息(視頻沒有播放)
06-03 19:19:48.129: D/ChromiumHTTPDataSource(129): connect to http://sdf.mysite.com/upload/video/456456.mp4 @19601517
06-03 19:19:48.139: V/HTC_Util(129): skip header(x-htc-autoclose)=true
06-03 19:19:48.139: V/HTC_Util(129): skip header(x-htc-buffertime)=7
06-03 19:19:48.139: V/HTC_Util(129): skip header(x-htc-internetwarning)=false
06-03 19:19:48.149: V/HTC_Util(129): skip header(x-htc-maxudpport)=65535
06-03 19:19:48.149: V/HTC_Util(129): skip header(x-htc-mimetype)=video/mp4
06-03 19:19:48.149: V/HTC_Util(129): skip header(x-htc-minudpport)=1024
06-03 19:19:48.159: V/HTC_Util(129): skip header(x-htc-romversion)=1.18.707.3
06-03 19:19:48.159: V/HTC_Util(129): skip header(x-htc-rtcpreportinterval)=3000
06-03 19:19:48.159: V/HTC_Util(129): skip header(x-htc-rtptimeout)=25000
06-03 19:19:48.159: V/HTC_Util(129): skip header(x-htc-rtspkeepaliveinterval)=35000
06-03 19:19:48.159: V/HTC_Util(129): skip header(x-htc-rtsptimeout)=25000
06-03 19:19:48.849: I/ChromiumHTTPDataSourceSupport(129): We requested a content range, but server didn't support that. (responded with 200)
06-03 19:19:48.849: I/ChromiumHTTPDataSource(129): Reconnect failed w/ err 0xffffffe0
06-03 19:19:49.189: D/WifiStateMachine(262): fetchRssiAndLinkSpeedNative RSSI = -51
06-03 19:19:49.829: V/NetworkStatsFactory(262): readNetworkStatsDetail(-1) start
06-03 19:19:49.849: V/NetworkStatsFactory(262): readNetworkStatsDetail(-1) line 48, tooks 21 ms
06-03 19:19:51.859: I/ChromiumHTTPDataSource(129): Reconnecting...
06-03 19:19:51.859: I/ChromiumHTTPDataSource(129): ReadFailed happened before
06-03 19:19:51.859: I/ChromiumHTTPDataSourceSupport(129): initiateDisconnect start
06-03 19:19:51.859: I/ChromiumHTTPDataSourceSupport(129): onInitiateDisconnect2 start
06-03 19:19:51.859: I/ChromiumHTTPDataSourceSupport(129): onInitiateDisconnect2 end
06-03 19:19:51.859: I/GCWorkerThread(129): GCNetworkThreadTask::run in
06-03 19:19:51.859: I/GCWorkerThread(129): Delete Context
06-03 19:19:51.869: I/GCWorkerThread(129): GCNetworkThreadTask::run out this = 0x1fe308
06-03 19:19:51.869: I/ChromiumHTTPDataSourceSupport(129): initiateDisconnect end
06-03 19:19:51.869: I/ChromiumHTTPDataSource(129): af mDelegate->initiateDisconnect
06-03 19:19:51.869: I/ChromiumHTTPDataSource(129): disconnect without forcebreak
06-03 19:19:51.869: D/ChromiumHTTPDataSource(129): connect to http://sdf.mysite.com/upload/video/456456.mp4@19601517
06-03 19:20:20.509: E/AwesomePlayer(129): content error
06-03 19:20:20.509: E/MediaPlayer(3936): error (1, -2147483648)
06-03 19:20:20.529: E/MediaPlayer(3936): Error (1,-2147483648)
06-03 19:20:20.529: D/VideoPlayerActivity(3936): onError: arg2=-2147483648 ,mIsDialogShowed: false ,mPhoneCallState:0
06-03 19:20:20.539: D/VideoPlayerActivity(3936): onError: status=3
嘗試從原始文件夾播放視頻,但仍然無法這樣做:
06-04 10:03:59.231: D/MediaPlayer(4636): setDataSource(Context context, android.resource://com.asdqwe.asd/2131099649, Map<String, String> headers) in
06-04 10:03:59.231: D/MediaPlayer(4636): [DLNA]unspuuort uri prefix, disable DLNA: android.resource://com.despark.bump/2131099649
06-04 10:03:59.341: D/MediaPlayer(4636): [DLNA]setDisplay
MediaPlayer類實際上是android中子系統的前端,稱為媒體播放器服務。 這種失敗的設備很可能缺乏對h264的供應商支持。 例如,根據我使用各種機頂盒設備的經驗,該系統在其供應商實現方面有所不同。
另外,chrome for android通過一系列生成的Jni綁定使用MediaPlayer類,所以如果你的設備支持h264,它應該在chrome中工作。 不幸的是,我不認為有一個簡單的解決方案,因為h264支持無處不在。 如果您可以控制媒體本身,則可以嘗試切換到webm。
你應該嘗試mediacontroller
try {
// Start the MediaController
MediaController mediacontroller = new MediaController(
videoscrnplay.this);
mediacontroller.setAnchorView(vdov);
// Get the URL from String VideoURL
Uri video = Uri.parse(VideoURL);
vdov.setMediaController(mediacontroller);
vdov.setVideoURI(video);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.