2011-10-12 24 views
6

Tôi có một ứng dụng mà tôi đang viết cho cả iOS và Android. Tôi có một trang nội dung mà tôi cần liên kết đến/phát video .mp4 trong giao diện người dùng UIWebView/WebView. Video sẽ được đưa vào ứng dụng để video có thể hoạt động ngoại tuyến.Chơi một video địa phương ứng dụng (.mp4) trong một webview

Với iOS Tôi chỉ sử dụng một thẻ video (với nguồn vào một tập tin dự án) và sau đó sử dụng NSNotifications để toàn màn hình và cảnh quan video (ứng dụng thông thường chạy ở chế độ dọc). Công việc hoàn thành.

Trên Android Tôi đang gặp một số vấn đề. Trước tiên, khi bạn sử dụng hình ảnh cục bộ làm áp phích video, ứng dụng đã gặp lỗi (dường như lỗi đã biết - sử dụng hình ảnh từ xa giải quyết được sự cố - mặc dù không có nhiều trợ giúp cho chế độ ngoại tuyến).

Thứ hai nó không chạy. Tôi đã thử cả tệp từ xa và cục bộ (được tham chiếu dưới dạng tệp: ///android_asset/html/video.mp4).

Tôi đã thử nghiệm các .mp4 từ trình duyệt Android và nó đóng ổn vì vậy tôi biết rằng video là tốt.

Tôi đã thử một chiến thuật khác nhau sử dụng một liên kết đến một đoạn video để thay thế. Tôi tìm thấy một ví dụ tại liên kết sau (phải sử dụng google bộ nhớ cache để xem): http://webcache.googleusercontent.com/search?q=cache:EVz7nwc8718J:www.codelark.com/2010/05/12/android-viewing-video-from-embedded-webview/+http://www.codelark.com/2010/05/12/android-viewing-video-from-embedded-webview/&cd=1&hl=en&ct=clnk&gl=uk

Mã của tôi là như sau:

webengine = (WebView) findViewById(R.id.webview); 
webengine.getSettings().setJavaScriptEnabled(true); 
webengine.getSettings().setPluginsEnabled(true); 
webengine.getSettings().setAllowFileAccess(true); 
webengine.setDownloadListener(new DownloadListener() 
{ 
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long size) 
    { 
     Intent viewIntent = new Intent(Intent.ACTION_VIEW); 
     viewIntent.setDataAndType(Uri.parse(url), mimeType);  
    try 
    { 
     startActivity(viewIntent); 
    } 
    catch (ActivityNotFoundException ex) 
    { 
     Log.w("sta", "Couldn't find activity to view mimetype: " + mimeType); 
    } 
} 

}); 
webengine.loadUrl("file:///android_asset/html/index.html"); 

Với một liên kết video từ xa nó cố gắng để mở trình duyệt Android và sau đó bails trở lại ứng dụng. Với một liên kết video địa phương dường như để tải các cầu thủ nhưng tôi nhận được "Không thể phát video - Rất tiếc, video này không thể chơi"

Đây là log logcat của tôi:

I/ActivityManager( 168): Starting: Intent { act=android.intent.action.VIEW dat=file:///android_asset/html/standrewsanimation.mp4 typ=video/mp4 cmp=com.cooliris.media/.MovieView } from pid 4299 
W/ActivityManager( 168): Trying to launch com.cooliris.media/.MovieView 
I/WindowManager( 168): Setting rotation to 1, animFlags=1 
I/ActivityManager( 168): Config changed: { scale=1.0 imsi=234/20 loc=en_GB touch=3 keys=1/1/2 nav=1/1 orien=2 layout=18 uiMode=17 seq=40} 
D/PhoneApp( 301): updateProximitySensorMode: lock already released. 
I/ApplicationPackageManager(3982): cscCountry is not German : H3G 
D/MovieView(3982): onCreate 
I/MovieView(3982): registerBroadcastRecievers 
D/MovieViewControl(3982): getFilePathByUri URI : file:///android_asset/html/standrewsanimation.mp4 
D/MovieViewControl(3982): getFilePathByUri path from DB - Path : null 
D/MovieViewControl(3982): getFilePathByUri path from uri - Path : /android_asset/html/standrewsanimation.mp4 
D/MovieViewControl(3982): checkDRMContent() path : /android_asset/html/standrewsanimation.mp4 URI : file:///android_asset/html/standrewsanimation.mp4 
W/System.err(3982): java.io.FileNotFoundException: File is not present 
W/System.err(3982): at android.drm.mobile2.OMADRMManager.IsDrmFileByExt(OMADRMManager.java:1032) 
W/System.err(3982): at com.cooliris.media.VideoDRMUtil.checkIsOMADrm(VideoDRMUtil.java:169) 
W/System.err(3982): at com.cooliris.media.MovieViewControl.checkDRMContent(MovieViewControl.java:236) 
W/System.err(3982): at com.cooliris.media.MovieViewControl.<init>(MovieViewControl.java:168) 
W/System.err(3982): at com.cooliris.media.MovieView$1.<init>(MovieView.java:68) 
W/System.err(3982): at com.cooliris.media.MovieView.onCreate(MovieView.java:68) 
W/System.err(3982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
W/System.err(3982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
W/System.err(3982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
W/System.err(3982): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
W/System.err(3982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
W/System.err(3982): at android.os.Handler.dispatchMessage(Handler.java:99) 
W/System.err(3982): at android.os.Looper.loop(Looper.java:123) 
W/System.err(3982): at android.app.ActivityThread.main(ActivityThread.java:3687) 
W/System.err(3982): at java.lang.reflect.Method.invokeNative(Native Method) 
W/System.err(3982): at java.lang.reflect.Method.invoke(Method.java:507) 
W/System.err(3982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
W/System.err(3982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
W/System.err(3982): at dalvik.system.NativeStart.main(Native Method) 
I/VideoView(3982): start() 
D/MovieView(3982): onStart 
D/MovieView(3982): onResume 
D/MovieViewControl(3982): onResume() 
D/VideoView(3982): onMeasure() 
I/VideoView(3982):  Setting size: 480x320 
D/VideoView(3982): onMeasure() 
I/VideoView(3982):  Setting size: 480x320 
V/AudioPolicyManager( 95): stopOutput() output 1, stream 1, session 301 
V/AudioPolicyManager( 95): getNewDevice() selected device 0 
V/AudioPolicyManager( 95): getNewDevice() selected device 0 
V/AudioPolicyManager( 95): setOutputDevice() output 1 device 0 delayMs 150 
V/AudioPolicyManager( 95): setOutputDevice() setting same device 0 or null device for output 1 
I/ActivityManager( 168): Displayed com.cooliris.media/.MovieView: +287ms 
V/PVPlayer( 95): PVPlayer constructor 
V/PVPlayer( 95): construct PlayerDriver 
V/PlayerDriver( 95): constructor 
V/PlayerDriver( 95): OpenCore hardware module loaded 
V/PlayerDriver( 95): start player thread 
V/PlayerDriver( 95): startPlayerThread 
V/PlayerDriver( 95): InitializeForThread 
V/PlayerDriver( 95): OMX_MasterInit 
V/PlayerDriver( 95): OsclScheduler::Init 
V/PlayerDriver( 95): CreatePlayer 
V/PlayerDriver( 95): AddToScheduler 
V/PlayerDriver( 95): PendForExec 
V/PlayerDriver( 95): OsclActiveScheduler::Current 
V/PlayerDriver( 95): StartScheduler 
V/PVPlayer( 95): send PLAYER_SETUP 
V/PlayerDriver( 95): Send player code: 2 
V/PlayerDriver( 95): CommandCompleted 
V/PlayerDriver( 95): Completed command PLAYER_SETUP status=PVMFSuccess 
V/PVPlayer( 95): setDataSource(/android_asset/html/standrewsanimation.mp4) 
V/PVPlayer( 95): setVideoSurface(0x5dbb8) 
V/PVPlayer( 95): setVideoSurface(0x5f1d0) 
V/PVPlayer( 95): prepareAsync 
V/PVPlayer( 95): data source = /android_asset/html/standrewsanimation.mp4 
V/PlayerDriver( 95): Send player code: 3 
V/PlayerDriver( 95): handleSetDataSource 
V/PlayerDriver( 95): handleSetDataSource- scanning for extension 
V/PlayerDriver( 95): HandleInformationalEvent: PVMFInfoErrorHandlingStart 
V/PlayerDriver( 95): HandleInformationalEvent: type=26 UNHANDLED 
W/MediaPlayer(3982): info/warning (1, 26) 
V/PlayerDriver( 95): CommandCompleted 
V/PlayerDriver( 95): Completed command PLAYER_SET_DATA_SOURCE status=PVMFErrNotSupported 
E/PlayerDriver( 95): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported 
E/MediaPlayer(3982): error (1, -4) 
V/PVPlayer( 95): run_init s=-2147483648, cancelled=0 
V/PlayerDriver( 95): HandleInformationalEvent: PVMFInfoErrorHandlingComplete 
W/PlayerDriver( 95): PVMFInfoErrorHandlingComplete 
I/PowerManagerService( 168): Ulight 3->3|12 
I/MediaPlayer(3982): Info (1,26) 
E/MediaPlayer(3982): Error (1,-4) 
D/VideoView(3982): Error: 1,-4 
D/VideoView(3982): onMeasure() 
I/VideoView(3982):  Setting size: 480x320 
D/VideoView(3982): onMeasure() 
I/VideoView(3982):  Setting size: 480x320 

Tôi cũng đã thử các cách tiếp cận trên trong shouldOverrideUrlLoading có cùng kết quả.

Cảm ơn

Trả lời

1

Tôi đã gặp sự cố tương tự. Finalyl Tôi nhận được điều hoạt động bằng cách sử dụng thẻ HTML5 "video"

  • Có điều gì đó trong hệ điều hành Android ngăn chặn việc mở video từ tài sản . Tôi đã phải sao chép html và video sang SDCard. Sau đó, bạn có thể sử dụng đường dẫn sdcard thay vì đường dẫn nội dung.
  • Dont quên sử dụng android: hardwareAcceletrated = "true" cho hoạt động webview của bạn
+1

android: hardwareAcceletrated = "true" không phải là avalible trong webview bây giờ một ngày ... tôi đang gặp vấn đề tương tự để chơi video trong chế độ xem web từ thư mục nội dung –

Các vấn đề liên quan