2010-09-22 49 views
18

Tôi có trình phát video HTML5 với thanh tìm kiếm tùy chỉnh, hoạt động tuyệt vời trên iPhone (phát nội tuyến) và trên trình duyệt.Tìm kiếm video HTML5 trên iPad

Nó cũng rất tuyệt trên iPad và thanh tìm kiếm được cập nhật khi phim phát, nhưng vì một lý do nào đó, tôi không thể tìm kiếm.

Tất cả các giá trị là chính xác và tôi đang cố gắng để thiết lập:

myPlayer.currentTime = XX; 

Thật không may, iPad từ chối để thiết lập các thuộc tính .currentTime.

Từ những gì tôi có thể thu thập sự khác biệt giữa trình duyệt và iPad là trên trình duyệt tôi nhận được:

myPlayer.networkState = 3 
myPlayer.readyState = 4 

Trên iPad tôi nhận được:

myPlayer.networkState = 2 
myPlayer.readyState = 3 

Đó là chính xác cùng một mã, chạy một video MP4 địa phương.

Bất kỳ ý tưởng nào tại sao điều này đang xảy ra?

Chúc mừng, Andre

+0

Bạn có thể đăng mã được đặt thời gian hiện tại không. Tôi có thể làm điều này mà không gặp nhiều khó khăn. –

+0

Ở đây: videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ... điều này hoạt động trong trình duyệt (một số trong số đó) và trên iPad, giá trị dấu vết ra ok, bu tài sản không được thiết lập. Tôi đang chạy 3.2 – Andre

+1

Tôi nhận thấy rằng cài đặt 'video.currentTime' trên iOS dường như bị chặn sau hành động của người dùng. Phát hành một 'alert()' hoặc một sự kiện touch trước khi thiết lập 'currentTime' dường như cung cấp phản hồi đúng - ngoại trừ tất nhiên cho tương tác người dùng mà nó yêu cầu. – eug

Trả lời

6

Tôi đã có tất cả các loại của các vấn đề nhận được hoạt Javascript để kiểm soát các yếu tố âm thanh, và rất nhiều thất vọng với tài sản currentTime, cùng với những hạn chế của Apple về những gì tạo nên bắt đầu sử dụng trực tiếp các sự kiện.

Nó sẽ không làm tôi ngạc nhiên nếu có một số lỗi lạ với JavaScript & Phát lại video HTML5 trên iPad (hoặc "tính năng" không có giấy tờ), yêu cầu giải pháp thay thế. Theo kinh nghiệm của tôi, iPad có cách làm việc độc đáo hơn những gì có trong tài liệu chính thức.

Bạn nên kiểm tra lỗi, đệm, seekabletìm kiếm thuộc tính của phần tử video. Nhìn vào readyState của bạn & giá trị networkState, iPad dường như nghĩ rằng video chưa được tải hoàn toàn - điều này thật kỳ quặc đối với một tài nguyên cục bộ.

đệmcó thể tìm kiếm được phải bằng phạm vi thời gian của toàn bộ video của bạn. tìm kiếm phải là TRUE. Điều đó ít nhất sẽ cung cấp cho bạn thêm một chút thông tin về vấn đề này.

Bạn đã thử nghiệm video đó với các video khác chưa? Nó có thể là có một số loại vấn đề mã hóa với video mà iPad có vấn đề.

Khác với điều đó - đã xảy ra lỗi trong phiên bản hệ điều hành iPad trước đó đã phá vỡ khả năng đặt thuộc tính currentTime. Bạn đang sử dụng phiên bản hệ điều hành mới nhất?

+0

Tôi đang sử dụng 3.2 (vì tôi không thể giới hạn nó mới nhất) và tôi đã thử một nguồn video khác, với cùng một vấn đề:/ – Andre

0

Tôi gặp cùng một vấn đề - đây là tài sản trong trường hợp của tôi:

UIWebView - iPad Simulator 
duration=4.861666679382324 
startTime=0 
currentTime=4.861666679382324 
buffered(1)=[0-0] 
seekable(0)= 
seeking=false 
error=null 
readystate=4 
networkstate=3 

Chrome: 
duration=4.9226298332214355 
startTime=0 
currentTime=4.9226298332214355 
buffered(1)=[0-4.9226298332214355] 
seekable(1)=[0-4.9226298332214355] 
seeking=false 
error=null 
readystate=4 
networkstate=1 

nên - không có gì là nhận được đệm và không có gì là seekable. tôi đang phát một clip cục bộ từ thư mục tài nguyên của một gói iPad, thông qua một UIWebView.

Trong trường hợp của tôi, tất cả tôi cần là để thiết lập lại để phía trên cùng của đoạn video sau mỗi vở kịch, và tôi đã có thể thực hiện điều này thông qua một cuộc gọi đến "tải()"

5

Vấn đề này có liên quan với giá trị được sử dụng trên tài sản video.currentTime. Trong trường hợp cụ thể của tôi, tôi đã khắc phục sự cố bằng cách luôn đảm bảo rằng tôi đã sử dụng các số dấu phẩy động với 1 chữ số thập phân trong khi tìm kiếm.

Đặt video.currentTime thành ZERO trên iOS 3.2 thực sự sẽ tìm kiếm video ở đầu nhưng giá trị sẽ không cập nhật sau đó - timeupdate sự kiện vẫn được gửi bình thường nhưng nếu bạn cố gắng đọc currentTime, nó sẽ luôn trả về cùng giá trị.

Để tìm cách bắt đầu sử dụng video 0.1 thay vì 0, để tìm kiếm 12.2345 sử dụng 12.2.

PS: bạn có thể sử dụng (+(12.2345).toFixed(1)) để hạn chế số chữ số thập phân để 1.

+0

Tôi có cùng một vấn đề và thử làm tròn như trên, nhưng nó không ' t dường như hoạt động trên iOS 6.1. – mzedeler

1

câu trả lời Kyle là một tốt nhất. Tôi sẽ thêm, bạn không thể giả định thuộc tính seekable được điền sau bất kỳ sự kiện cụ thể nào. Điều này có nghĩa là bạn không thể đợi các sự kiện như loadedmetadata, canplay hoặc bất kỳ mục đích nào khác và giả định rằng bạn có thể đặt an toàn tại currentTime tại thời điểm đó.

Có vẻ như cách an toàn nhất để làm là kiểm tra seekable sau mỗi sự kiện liên quan đến video và nếu nó bao gồm thời gian bạn muốn tìm, hãy đặt currentTime tại thời điểm đó. Trên iPad, seekable có thể không được lấp đầy cho đến sau sự kiện canplaythrough, khá muộn.

Xem my blog post để biết thêm về điều này.