2011-12-14 30 views
7

Tôi sử dụng DDMS để lấy ảnh chụp màn hình từ điện thoại Android của mình và tôi cần một cách hiệu quả để chuyển đổi chúng trong video và phát video qua mạng.Lưu trữ, chuyển đổi sang video một dòng màn hình Android

Tôi có một RawImage được lấp đầy với các dữ liệu của các ảnh chụp màn hình:

RawImage mRawImage; 

Cho đến khi biết tôi sử dụng SWT để tạo ra các hình ảnh và lưu nó:

PaletteData paletteData = new PaletteData(
    mRawImage.getRedMask(), 
    mRawImage.getGreenMask(), 
    mRawImage.getBlueMask()); 

ImageData imageData = new ImageData(
    mRawImage.width, 
    mRawImage.height, 
    mRawImage.bpp, 
    paletteData, 
    1, 
    mRawImage.data); 

ImageLoader s = new ImageLoader(); 
s.data = new ImageData[] {imageData}; 
s.save("temp.jpg",SWT.IMAGE_JPEG); 
  • thể bạn đề xuất một cách để chuyển đổi các chuỗi hình ảnh đó thành video và sau đó phát trực tuyến video?

Tôi tìm thấy NanoHTTPD có thể được sử dụng để phát trực tuyến nhưng làm cách nào để chuyển đổi và nén hình ảnh thành video?

  • Bạn có tin rằng tôi có thể làm điều đó bằng ffmpeg không?

Tôi đã tìm thấy một số Tutorial tốt để truyền trực tuyến webcam của bạn bằng FFMPEG và video4linux2.

Có thể gửi bytes từ RawImage tới FFMPEG được chuyển đổi thành luồng video trực tiếp không?

đang thực tế:

$ffmpeg -f video4linux2 -i /dev/video0 http://78.47.18.19:8090/cam1.ffm 

Thay thế nó bằng một cái gì đó tương tự như:

$ffmpeg -f video4linux2 -i **<add here java stream>** http://78.47.18.19:8090/cam1.ffm 

gợi ý Bất kỳ?

Cảm ơn

PS: Tôi mong đợi một giải pháp mà sẽ giúp tôi chuyển đổi các hình ảnh đến một video nén và sau đó dòng video qua mạng để chơi nó với một trong hai HTML5 hoặc Flash Player

+0

Xin chào Salamis, tốc độ bạn sẽ chụp ảnh tĩnh ở đâu? – Janvo

+0

5-10 khung hình mỗi giây là đủ. – glarkou

+0

Xin chào Salamis, tôi tin câu trả lời của tôi dưới đây sẽ trả lời các câu hỏi của bạn ở trên. Bạn sẽ cần phải đảm bảo rằng việc chụp trên thiết bị cung cấp cho bạn đủ khung hình mỗi giây để mã hóa thành video (xem tham số -r trong ffmpeg). – Janvo

Trả lời

5

có hai cách tiếp cận này:

1) Capture, Encode và Stream trên và từ các thiết bị chính nó

hoặc

2) Chụp trên thiết bị, Mã hóa và Luồng từ máy chủ

Tôi không biết tất cả các yêu cầu của bạn nhưng tôi cho rằng tùy chọn 2 là tuyến đường cần thực hiện. Bạn sẽ có hiệu suất tốt hơn và một loạt các công cụ để sử dụng để đạt được mục tiêu cuối cùng của mình.

Chụp Chụp ảnh JPEG gần như chính xác cách bạn mô tả. Ngoại trừ thêm một chỉ mục vào mỗi cái sao cho bạn có FILE1.JPG FILE2.JPG FILE3.JPG FILE4.jpg v.v.

Bây giờ, tại một số khoảng thời gian, tùy thuộc vào yêu cầu của bạn, hãy tải những hình ảnh này lên máy chủ.

Encode Sử dụng mencode để thiết lập các tỷ lệ nén lossy như vậy:

mencoder "./*.jpg" -mf fps=5 -o yourvideo.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800

Khi đã xong, sau đó bạn có thể sử dụng ffmpeg để tạo ra MP4 như vậy:

ffmpeg -r 5 -b 1800 -i %01d.jpg yourvideo.mp4 

Phát trực tiếp Bây giờ để phát trực tuyến mp4 qua mạng, tôi sẽ etup một trang web như:

http://myserver/androidStream 

Tải lên danh sách phát M3U được viết động sao cho nó luôn trỏ đến video cập nhật nhất để phát trực tuyến. Tùy thuộc vào trình phát bạn đang sử dụng, bạn có thể trỏ danh sách phát M3U đến danh sách phát M3U 'tiếp theo' sẽ tải video tiếp theo lên. Bạn cũng có thể muốn xem xét các định dạng danh sách phát thay thế như ASX hoặc PLS tùy thuộc vào yêu cầu của bạn.

Xem: http://en.wikipedia.org/wiki/Advanced_Stream_Redirectorhttp://en.wikipedia.org/wiki/PLS_(file_format) làm ví dụ về các định dạng danh sách phát khác không phải M3U.

Sử dụng các bước chung ở trên, bạn sẽ có một hệ thống nơi thiết bị đang chụp ảnh với tốc độ n hình ảnh mỗi phút và sau đó tải những hình ảnh đó lên máy chủ để mã hóa. Khi những hình ảnh được mã hóa, bạn có thể truyền trực tiếp phim bằng cách tham chiếu tệp hoặc bạn có thể thiết lập danh sách phát loại M3U cho phép người chơi chuyển từ video 'hiện tại' sang video 'tiếp theo' khi video khả dụng.

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