簡體   English   中英

嘗試在視頻視圖中播放來自網址的視頻時,我收到一個FileNotFoundException:某些手機上沒有內容提供商錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM