Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Mẹo vặt Red5 2228

JVM
ngocdaothanh.myopenid.com 172
Updated over 2 years ago

Sau khi tìm hiểu RTMP và cài Red5, với kiến thức Java cơ bản sẵn có chắc bạn đã sẵn sàng dùng Red5 để viết trang web chia sẻ phim, multiplayer game, hay bét ra cũng là chương trình webcam chống trộm phải không?{#emotions_dlg.wink}

Bài này trình bày một số mẹo vặt khi dùng Red5, có lẽ sẽ không còn cần thiết khi Red5 1.0 ra đời.

Trước khi đọc tiếp, cần đọc các tài liệu trong thư mục doc của Red5.

Kiểu cài đặt

Có 2 kiểu cài:

  • Standalone: Có sẵn Jetty hoặc Tomcat làm server, tùy phiên bản Red5
  • WAR: Cài như là chương trình web Java bình thường

Để đơn giản nên cài kiểu standalone.

Debug bằng Eclipse

Nếu là standalone:

  • Sửa conf/wrapper.conf (chỗ conf/red5.policy có thể phải dùng đường dẫn tuyệt đối, chỗ 8787 không thể đổi thành cổng khác)
    wrapper.java.additional.1=-Djava.security.manager
    wrapper.java.additional.2=-Djava.security.policy=conf/red5.policy
    wrapper.java.additional.3=-Xdebug
    wrapper.java.additional.4=-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
  • Làm tiếp theo hướng dẫn ở http://sziebert.net/posts/remote-debugging-red5-applications/

Nếu là WAR: dùng plugin Tomcat nào đó.

rejectClient

Trong xxxConnect:

  • Không cho client connect: return false
  • Để trả về giá trị gì đó cho client: rejectClient(value)‏

Điều quan trọng là 2 cái trên độc lập với nhau! Nghĩa là rejectClient nhưng trả về true, thì ở client, event.info.code vẫn có giá trị là "NetConnection.Connect.Success". Để check giá trị trả về ở client, dùng event.info.application.

Tuy nhiên, để tránh phải xử lí phức tạp ở onNetStatus, không nên truyền kết quả kiểu này, mà server gọi luôn hàm gì đó ở client cho xong:

IServiceCapableConnection sc = (IServiceCapableConnection) conn;
sc.invoke("onLoginSuccess", new Object[] {nicks, moves});

Duyệt qua các client

Iterator it = this.getScope().getClients().iterator();
while (it.hasNext()) {
IClient client = (IClient) it.next();
}

Attribute

Lợi hại, ví dụ có thể dùng để đánh dấu player đã login hay chưa.

Tuy nhiên để attribute không persistent (lưu vào thư mục persistent của app):

  • xxx.setPersistent(false) không tác dụng, có lẽ tuỳ phiên bản
  • Phải gọi xxx.setStore(null) trước khi gọi get/setAttribute   

Truyền array

Java và ActionScript là 2 ngôn ngữ khác nhau, nên không thể truyền dữ liệu có kiểu bất kì cho nhau. Đối với kiểu array (hay dùng):

  • Actionscript index array of the same data type converts to a Java array.
  • Actionscript index array of different data types converts to a Java ArrayList.
  • Actionscript associative array converts to a Java HashMap.

Cắt ảnh từ video truyền từ client

Thường người ta dùng Red5 để stream video từ server cho client. Đối với chương trình như hội thảo video trực tuyến, có thể truyền video (webcam) từ client cho server để server broadcast lại cho các client khác. Lúc này nếu muốn cắt frame nào đó từ video thành ảnh tĩnh, có thể tham khảo đoạn mã này.

Đoạn mã này lưu phim theo định dạng FLV xuống đĩa, rồi gọi chương trình ffmpeg bên ngoài theo kiểu command line để chuyển tập tin video FLV lưu trên đĩa thành ảnh PNG. Cách này chậm, tốn nhiều CPU. Cách tốt hơn là xử lí in-process, chẳng hạn nối trực tiếp với libffmpeg hoặc dùng thư viện gì đó của Java để chuyển khối dữ liệu theo định dạng FLV thẳng thành khối dữ liệu theo định dạng PNG.

Tham khảo

  • http://osflash.org/red5/help
  • http://labs.adobe.com/technologies/flex/
  • http://dev.binertia.com/red5.html
  • http://www.actionscript.org/resources/articles/615/1/Getting-started-with-red5-server/Page1.html
  • http://www.red5tutorials.net
  • http://www.joachim-bauch.de/tutorials/red5/MigrationGuide.txt/view
  • http://jira.red5.org/confluence/display/codecs/Data+Type+Mappings

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content