OpenVTV – xem các kênh truyền hình VTVplus trên XBMC

Kênh truyền hình internet của VTVplus nhìn chung chất lượng khá tốt, xem ít khi bị giật. Tiếc là họ chỉ cung cấp dịch vụ cho nền tảng android, ios và xem trực tiếp trên web, không xem được trong XBMC. Tiện thể các cụ ở Việt Nam sắp sang chơi nên mình bỏ chút thời gian ngồi viết cái add-on cho XBMC để xem các kênh VTVPlus lúc các cụ rảnh rỗi cho đỡ buồn. Cũng là dịp học thêm chút về Python.

Thực ra lúc đầu viết cái add-on này rất đơn giản, vì VTVPlus để nguyên cả link đến các kênh trong html source trang web của họ. Chỉ cần viết vài dòng lệnh Python để tự động log in vào server của VTVPlus bằng một tài khoản đăng kí trước, sau đó dùng regular expression để tách cái link (không phải là link tĩnh, nó có đi kèm với 1 cái session token), đẩy cái link tách được này cho XBML Player là xong. Tài liệu hướng dẫn để viết addon cho XBMC cũng như tài liệu học Python có sẽ trên mạng, chỉ cần hỏi google.

Nhưng cách đây 1-2 tháng gì đó thì không còn xem được nữa, không biết tại sao VTVPlus lại cố tình gây khó khăn bằng cách mã hóa hết các link này. Có lẽ không cần thiết phải làm vậy bởi vì mục tiêu của họ là càng có nhiều người xem càng tốt, các kênh phải trả tiền có bị ăn cắp đâu mà lo. Nhiều người xem các kênh miễn phí thì sẽ có thêm nhiều người mua kênh phải trả tiền.

Mới đầu nhìn vào mấy đoạn code mã hóa rất là nản nên mình bỏ luôn, gần đây có thời gian rảnh chút thì chịu khó hơn nên hiểu ra được các công đoạn mã hóa của họ. Họ dùng thư viện JCrytion (javascript) để liên lạc với server để trao đổi một cái key thông qua thủ tục RSA, sau đó dùng key này để giải mã các link đã được mã hóa bằng thuật toán AES, các bước có thể được mô tả như sau:

  1. client kiểm tra xem đã trao đổi key với server chưa, nếu đã trao đổi lấy cái key cũ ra và nhảy đến bước 4
  2. client yêu cầu server gửi cho một cái public RSA key. Server sẽ generate một cặp private + public keys và gửi cái public key cho client
  3. client sẽ tạo một cái key ngẫu nhiên, dùng public key nhận được ở server để mã hóa cái key này và gửi cho server. Server nhận được sẽ dùng private key để giải mã ra. Sau đó key này được dùng để mã hóa chính nó bằng AES và gửi lại cho client. Client giải mã và kiểm tra xem có đúng là cái key mình đã gửi đi hay không. Lúc này cả server và client đều đã có một cái key chung dùng cho mã hóa/ giải mã thông tin về sau sử dụng thuật toán AES
  4.  client yêu cầu server gửi link video của kênh cần xem, server gửi lại link đã được mã hóa
  5. client giải mã link

Như vậy cái addon của mình cần phải có hai hàm quan trọng là mã hóa RSA bằng public key, giải mã AES. Phần mã hóa RSA có thể tự viết luôn vì nó khá đơn giản sau khi tham khảo về thuật toán trên wikipedia. Nhưng phần giải mã AES thì lại phức tạp hơn. Mặc dù cách mã hóa 1 block (16bytes) thông tin bằng AES chỉ có một (Rijndael) , nhưng lại có nhiều dạng thức AES dùng đễ mã hóa một chuỗi tin (blocks). Ở đây JCryption sử dụng AES CTR, tuy nhiên dùng thư viện có sẵn PyCrypto của python lại cho ra kết quả sai, thế nên mình phải đọc code của JCryption và tham khảo một đoạn code giải mã viết trên Java để port sang Python. Để giải mã từng block thay vì sử dụng PyCrypto mình sử dụng đoạn code ở đây  , dù không nhanh như PyCrypto nhưng lại không mất công đoạn cài đặt thư viện vào XBML.

Ngoài ra cũng cần lưu ý key ngẫu nhiên do client tạo ra phải dài 128 ký tự và có chứa chuỗi “www.vtvplus.vn” nằm từ vị trí 33 thì mới được server chấp nhận.

Cái addon  này có thể download ở đây

https://dl.dropboxusercontent.com/u/16076373/sourcecode/plugin.video.OpenVTV-0.1.0.zip

About these ads

14 thoughts on “OpenVTV – xem các kênh truyền hình VTVplus trên XBMC

  1. Cám ơn bác đã làm addon cho xbmc, em chờ mãi :D
    Hôm nay mới tìm ra cài ngay, nhưng lại ko xem đc, bác có cao kiến hay update j ko :D

    • Tôi vẫn dùng bình thường ở nhà. Bạn đã vào phần settings của addon để điền username/password của vtvplus vào chưa?

  2. cai tren ipad bi loi “script failed: tv.py”, da dien username & password cua vtvplus, coi tren safari thi binh thuong

    • Cái này tôi chỉ mới test trên XBMC chạy trên nền Windows 7 và Ubuntu 12, chưa thử trên XBMC on IOS.
      Mà trên Ipad sao ko cài thẳng luôn vtvplus mà xem

      • chi muon test xbmc tren ipad thoi. Hom nay cai tren Ubuntun 12, cung bi loi khong xai duoc, da enter username/password

  3. Cám ơn bạn đã chia sẻ, nếu có thể bạn hãy viết plugin cho web TV24.vn, vì web này free, không cần trả phí như vtvplus !
    Thanks

  4. Please Let us know when you get it to work with xbmc on apple tv and also can you post a step by step installation instruction too. Thank you very much

    • It works on Xbmc for Windows 7 and Ubuntu 12. Already tested.
      Unless God gives me an Apple TV, there no way I can know if it works on that.

      For installation: System > Settings > Add-ons. Now you should get the ‘Install from zip file’

    • Vtvplus họ lại vừa mới thay đổi trang web nên version cũ không hoạt động được nữa, cần 1-2 tuần nữa có thời gian rảnh tôi sẽ cập nhập.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s