2009-12-22 36 views
5

Tôi muốn hiển thị kết cấu video trong ứng dụng của mình với tệp video do người dùng cung cấp.Cách tải video từ tệp trong XNA? (PC Only)

Texture2d có phương thức FromFile, nhưng Video thì không.

Bất kỳ ý tưởng nào? (Tôi chỉ cần hỗ trợ PC)

Cảm ơn.

Trả lời

0

Vâng, tôi mất một lúc nhưng tôi đã bẻ khóa này.
Đi qua các đường ống nội dung không phải là một lựa chọn, vì bạn cần cài đặt GameStudio.
Tôi đã kết thúc kỹ thuật đảo ngược trình tạo nội dung XNA để tìm ra cách tạo các tệp XNB của riêng tôi. Chỉ ra rằng đối với các tệp WMV, XNB là một bộ mô tả nhị phân đơn giản.
Bây giờ tôi chỉ cần tạo một XNB cho bất kỳ WMV nào tôi tìm thấy trong thời gian chạy, đưa nó vào thư mục Nội dung,
và nó hoạt động tốt.

+3

Hey Shachar, tôi đang sử dụng phương pháp sử dụng GameStudio nhưng lại thích một phương pháp đơn giản hơn. Bạn có thể cung cấp thêm một số chi tiết về giải pháp mà bạn đã đến không? Bất kỳ cơ hội bạn có thể chia sẻ mã để tạo ra các xnb cho wmvs? – JohnU

+0

@Shachar Weis rất thích xem bạn đã làm như thế nào, quan tâm chia sẻ? Điều này có thể rất hữu ích! – TimothyP

1

Rất tiếc, điều này sẽ không hoạt động ... API của họ yêu cầu video phải được xử lý thông qua đường dẫn nội dung.

Tôi chưa cập nhật vì API video đã được nhóm XNA phát hành, nhưng bạn có thể xem dự án nguồn mở này mà tôi đã viết, Scurvy.Media (http://scurvymedia.codeplex.com/). Nó cũng là một đường dẫn nội dung, nhưng có lẽ bạn có thể sửa đổi nó để làm việc thông qua một phương thức kiểu .romFile.

vui lòng liên hệ với tôi qua codeplex nếu bạn có bất kỳ câu hỏi nào. :-)

0

Bạn cũng có thể thử các XNA DirectShow Video Player:
http://xnadsplayer.codeplex.com/

Tôi chưa bao giờ sử dụng nó, vì vậy không chắc chắn nó hoạt động tốt như thế nào, nhưng đó là một lựa chọn cho bạn.

4

Bạn có thể thử sử dụng API video được thêm vào trong XNA 3.1, cùng với winform content loading sample trên trang web của người tạo. Mẫu này cho thấy cách cho phép người dùng chọn một tệp nội dung và có hệ thống biên dịch nó thành tệp .xnb và sau đó tải nó trở lại vào bộ nhớ khi chạy.

+0

Mẫu này tải các mô hình với: contentBuilder.Add (tên tệp, "Model", null, "ModelProcessor"); Tôi không thể tìm thấy "Bộ xử lý" có thể tải Video. Tôi đã thử "VideoProcessor" Nhưng điều đó không hoạt động. –

2

Vì đã đề cập đến Aphid, bạn có thể sửa đổi winform content loading sample.

Để có được nó để chấp nhận WMV, bạn cần phải sửa đổi như sau:

Thêm VideoImporters đến các mảng lắp ráp trong ContentBuilder.cs:

static string[] pipelineAssemblies = 
{ 
    "Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.VideoImporters" + xnaVersion  
}; 

Sau đó, trong MainForm.cs thay đổi

contentBuilder.Add(fileName, "Model", null , "ModelProcessor"); 

to

contentBuilder.Add(fileName, "Video", "WmvImporter" , "VideoProcessor"); 

Sau đó, bạn sẽ phải phát video bằng phương pháp được mô tả trong Playing a Video on a Surface example

Phương pháp này chỉ hoạt động bằng cách sử dụng phiên bản 3.1 của ví dụ Đang tải nội dung; trong XNA 4 làm như tôi mô tả throws a Pinvoke error. Tôi đã đăng lên các diễn đàn XNA với hy vọng tìm được giải pháp cho vấn đề này.

EDIT: Tôi nhận được câu trả lời sau đây từ một XNA Framework Dev trong tham chiếu đến các ngoại lệ pinvoke:

Bạn có thể yên tâm bỏ qua cảnh báo này. MDA này được bật theo mặc định bởi VS2010 để cho biết các sự cố có thể xảy ra sự cố cho pinvokes không có tuyên bố gọi điện rõ ràng được tuyên bố. Điều này được sử dụng để tắt theo mặc định trước VS2010 vì vậy đó là lý do tại sao bạn không nhìn thấy nó trong 3.1.Chúng tôi đã phát hiện ra điều này một chút quá muộn trong trò chơi GS4 để biến nó đi nhưng thực chất không có vấn đề gì với chức năng này. Bạn chỉ nên nhấn lần này khi bạn đang phát triển/gỡ lỗi bộ xử lý tùy chỉnh của mình. Nó là dễ hiểu gây phiền nhiễu và bạn có thể tắt nó đi bằng cách đi vào Debug-> Ngoại lệ-> Quản lý Gỡ lỗi Assistants-> PInvokeStackImbalance. Chúng tôi sẽ thực hiện việc này cho lần phát hành tiếp theo .

1

John U. Bạn có thể mở tệp XNB bằng trình chỉnh sửa hex và bạn sẽ thấy định dạng. Tên của tệp video tương ứng nằm trong đó, bạn có thể ghi đè lên nó bằng tên tệp tương ứng mà bạn cần. Đó là những gì tôi đã làm cho dự án của tôi. Làm việc trên một cách để viết các tập tin nhị phân bản thân mình ngay bây giờ.

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