Tôi có một tình huống khiến tôi bối rối nên tôi đang tìm kiếm bất kỳ trợ giúp nào tôi có thể nhận được.Laravel 5 Phản hồi HTTP, Tệp M4V và iOS MPMoviePlayerViewController
Tôi có ứng dụng iOS sử dụng MPMoviePlayerViewController để phát tệp video M4V được quản lý bởi trang web Laravel 5.
Các tệp video phát hoàn toàn tốt (trong iOS) nếu chúng được tải trực tiếp từ thư mục công cộng 5 của Laravel. Tuy nhiên, tôi thường lưu trữ và phục vụ Video Files từ Mặt nạ lưu trữ của Laravel 5 vì cuối cùng tôi sẽ sử dụng S3 và trình chuyển mã đàn hồi.
Tính năng này hoạt động trong FireFox với plugin trình duyệt QuickTime, VLC và các ứng dụng phát video trực tuyến khác, chứ không phải ứng dụng iOS của chúng tôi.
Theo như tôi có thể nói MPMoviePlayerViewController đang được chọn lọc về cách Phản hồi HTTP đang được định dạng. Tôi đã thử StreamedResponse, nhưng điều đó dường như không giúp ích gì.
Vì vậy, ví dụ như các URL sau đó kéo các tập tin trực tiếp từ thư mục/công cộng hoạt động tốt từ iOS:
http://172.16.160.1/video_ae9a7da0efa211e4b115f73708c37d67.m4v
Nhưng nếu tôi sử dụng Laravel 5 để kéo các tập tin từ lưu trữ với URL này iOS sẽ không chơi nó.
http://172.16.160.1/api/getfile/f444b190ef5411e4b7068d1890d109e8/video_ae9a7da0efa211e4b115f73708c37d67.m4v
Note iOS không cung cấp bất kỳ lỗi nào có ý nghĩa, để giúp gỡ lỗi này, nhưng tôi tích cực của nó như thế nào đáp ứng HTTP của tôi đang được thực hiện bởi Laravel 5.
Đây là Route của tôi:
Route::get('myapi/getfile/{filename?}', '[email protected]')->where('filename', '(.*)');
đây là điều khiển của tôi:
public function getfile($filename)
{
return $api = API::getfile($filename);
}
đây là mẫu của tôi:
public static function getfile($filename) {
$file = Storage::disk('local')->get('Files/'.$filename);
return (new Response($file, 200))->header('Content-Type', 'video/mp4');
}
Nếu tôi để lại bất kỳ thông tin hỗ trợ nào, vui lòng cho tôi biết và tôi sẽ đăng. Bước tiếp theo của tôi có thể là thiết lập Wireshark testbed và xem cái bắt tay trông như thế nào.
Cảm ơn bạn đã trợ giúp. :-)
cảm ơn chia sẻ này, có thể tiêu đề phải được mở rộng với 'Content-Transfer-Encoding' => 'binary', 'Content-Disposition' => 'attachment; filename = "'. $ filename.'" ' – simon
Cảm ơn rất nhiều vì điều này. Đã lưu cho tôi một loạt thời gian sau khi đã dành hơn 2 giờ để cố gắng hiển thị video trên iPhone trong Safari (máy tính để bàn) từ Laravel. – AndyDunn