Monday, June 12, 2017

Hướng dẫn giảm 99.99% chi phí bằng google drive cho web phim


Việt nam như các anh em cũng biết là đất nước con rồng cháu tiên với nghề làm web truyền thống chỉ xoay quanh web nhạc, web phim, web tin tức.
Tôi đoán là web kiểu này dễ hút khách. Admin có thể len lén cài quảng cáo kiếm tí tiền, có thể là ly cà phê sáng hoặc hoá đơn tiền net tháng đéo nào cũng thu, dù cáp tiên rồng vẫn cứ hay đứt đúng lúc.
Web tin tức không nói, nhưng nhạc và phim có 1 vấn đề lớn về storage và bandwidth, mà ở VN này ko thể thu phí dc, có chó nó mua.
Anh em nên nhớ chúng ta có thể đọc 1 năm 1/2 cuốn sách, chứ phim thì bú đều ngày-3-bữa, nhất là phim, hehe, thôi không nói ngại quá. Nếu anh em mở web phim, giới mộ điệu không thiếu, có chăng là thiếu chỗ chứa phim (storage) và thiếu băng thông truyền tải (bandwidth).
Biên nhanh về storage: 1 bộ phim HAY chất lượng 720p khoảng tầm 1GB. Suy ra để làm 1 web phim cỡ vừa với trên dưới 10000 bộ, anh em cần 10TB storage.
Amazon cloud storage S3 lừng danh ai cũng biết tôi ko nói nữa. Họ thu phí lưu trữ 0.025 đỗ nam trung cho 1GB dữ liệu nhạy cảm, mà nếu ko nhạy cảm giá vẫn thế !
10 TB ta cần trả cho amazon 250$ tháng.
Đó là chưa kể giá băng thông, cứ cho trung bình 1 tháng 1 phim trong web dc coi 10 lần, ta cần băng thông 100 TB. Amazon S3 lừng danh gọi đây là Data Transfer, giá rẻ như cắt cổ gà 0.07.
Khỏi phải nói ta cần móc túi chi thêm cho tụi con buôn này 7000$ mỗi tháng.
Và anh em hãy nhớ lấy, tuy phải trả 7250$ nhưng nếu anh em thu phí xem phim, web của anh em sẽ ko 1 bóng người.

Giải pháp storage gần miễn phí


Google Drive! ai ai cũng biết google có chính sách khuyến học, chỉ cần là sinh viên với 1 email đuôi edu minh chứng, anh em sẽ có ngay 1 acc google drive với dung lượng ko hạn chế.
Thị trường chợ đen đang bán acc dạng này với giá nửa triệu việt nam đồng, nhưng hãy lưu ý hạn dùng của acc. Theo kinh nguyệt của tôi, thường là từ lúc mua cho đến lúc người bán lấy lại. ( có thể 1 ngày hoặc vài tháng - hên xui)
Nói thì nói, chúng ta là lập trình viên thần thánh hiển nhiên đã thất-học từ lâu, ko cần dùng email edu, anh em hãy chịu chi 10$ 1 tháng cho gói gsuite bussiness, đãi ngộ tương tự nếu ko nói là ngon hơn.
Như thế từ 250 đô 1 tháng cho storage, chúng ta chỉ tốn 10$.
Đó là chưa kể khi anh em up phim lên. Drive sẽ tự động xem ké, và convert phim gốc sang các thể loại nhẹ hơn, tỉ dụ anh em up phim 1080p thì sau đó anh em sẽ có phim 1080p, 720p, 480p. Các link phim giảm chất lượng này quá phù hợp để chíu trên mobile. Điểm hay nhất là drive tự làm FREE.
Như vậy giải pháp storage đã có. Giờ là vấn đề băng thông.

Hô biến drive thành streaming server

Hiển nhiên Drive không phải host để có thể stream video, mục đích của drive là để lưu trữ những thước phim tình cảm gia đình. Như phim con bé anh chị gọi Ba lần đầu, tất nhiên thể loại tình cảm gia đình mà anh chị vừa nghĩ đến cũng có thể up lên, nhưng tôi khuyên anh chị rất không nên up. Hãy nhớ internet never forgets and never forgives.
Khi đoạn phim tình cảm trên được up lên, drive sẽ cho các anh chị chuột phải và chọn Preview để xem. Một popup overlay sẽ hiện lên và chiếu lại đoạn phim nhạy cảm.
Là lập trình viên thần thánh, chúng ta ngay lập tức mở chrome dev tools và bắt dc 1 request URL như hình.

Dễ dàng nhận thấy link get_video_info nhận vào 1 param là docId, đây chính là id của đoạn phim tình cảm. Hãy xem response của request trên trả về nội dung gì

status=ok&hl=en&allow_embed=0&ps=docs&partnerid=30......

Trông có vẻ là 1 query string, bắt đầu bằng status=OK, chúng ta có thể đoán nếu status !== OK là có lỗi.
Thử parse đoạn response dùng chính lib querystring của nodejs thì chúng ta thấy dc 1 thứ rất thú vị, ngay key fmt_stream_map đó là các link stream videoplayback theo kiểu số|link, ngăn cách nhau bởi dấu phẩy

Thử copy 1 link ra chạy thì aha đây là link stream ta đang tìm. Nhúng link này vào thẻ video của html ta có ngay 1 trang phim không tốn bandwidth.
Vậy còn cái số trước link là gì, ta thấy có các số 18, 22, 35 vân vân và mây mây. Nếu các anh em thành tâm muốn biết wikipedia sẽ trả lời:

Như vậy theo hình chụp từ trang wikipedia số 18 ý nói phim tình cảm được lưu là video/mp4, dc mã hoá chuẩn H.264 và chất lượng 360p.
Đến đây, anh em có thể code 1 tool input vào docId và output ra các link phim với đủ chuẩn loại và chất lượng khác nhau.

Bài viết đến đây là hết.

Đó nếu là người khác sẽ nói vậy nhưng tôi biên tut ko bao giờ giấu nghề hehe, hãy đọc tiếp vì chúng ta còn nhiều thứ hay ho để nói.

Giờ trước khi qua vấn đề kế, hãy cùng ôn lại những ưu điểm của link stream này:
  1. Gắn vào thẻ video của html ngon lành, hỗ trợ controls play pause seek, tốc độ cực nhanh vì có cdn toàn cầu, tài trợ bởi google lão anh hùng và các internet provider local. (yes băng thông phim lấy từ link stream kia dc tài trợ bởi viettel, vdc và fpt đó, google ko tốn xu nào đâu)
  2. Link stream videoplayback ko có id của phim tình cảm, giúp người up an tâm ngủ ngon và sống đúng với tuổi của mình ko cần xin phép ai như bạn Vàng Anh.
  3. Từ link stream videoplayback chúng ta ko có cách nào suy ngược ra dc link gốc, ngay cả google cũng thế. Cũng ko thể báo cáo vi phạm giúp drive trở thành vùng đất an lành cho thể loại phim khó nói nhưng dễ hình dung. ( gần đây google có 1 vài động thái để debug vụ link này, sẽ bàn ở bên dưới)
  4. Quan trọng nhất, anh em không tốn 7000 đô la đỗ nam trung bandwidth, do hot link trực tiếp từ server của google. Các anh em làm phim ở VN ko tốn 1 xu tiền bandwidth nào cho tới bi giờ.
  5. Up 1 phim thôi nhưng lấy về nhiều link với nhiều loại chất lượng khác nhau. Tối ưu cho mobile.
  6. Bypass dc limit của google drive. Cái này ko nhiều anh em biết, nhưng nếu anh em share 1 file từ google drive cho nhiều đồng nghiệp xem vui chơi giải trí. File đó nếu HAY sẽ bị block ngay, do nhiều view quá. Link stream trên coi thoải mái ko lo bị block.
OK, giờ khi đường tăng xin link đã thỉnh dc link, chúng ta hãy gởi link cho bạn bè xem để chảnh chó. Kết quả ko ai coi dc. Đây là lúc anh em nhận ra một sự thật:

Link stream videoplayback bị giới hạn bởi IP Address

Nói thì nói, link này là do anh em tự preview phim của mình để coi lại, hiển nhiên ai preview thì người đó coi. Google lão anh hùng đã nhúng kèm vào đoạn querystring IP của người lấy link, và check từng bit của ip đối chứng khi chíu phim, kết quả là những bạn bè đồng nghiệp có IP khác sẽ bị 403.

Giờ đây chúng ta đối mặt với 1 vấn đề khó khăn nhất, làm thể nào qua mặt dc google khi link bị giới hạn bởi IP của người GET, làm thế nào để chúng ta có thể GET link từ server của mình, để rồi gởi cho hàng triệu con dân đang gào thét vì đói phim tình cảm hoặc phim nhạy cảm ?

Qua mặt hệ thống ip mapping của google

Hãy xem lại định dạng link stream videoplayback, bên dưới là các querystring quan trọng mà các anh em cần lưu ý
https://r15---sn-i3b7knez.c.drive.google.com/videoplayback?id=2c6374eb1653ae1c
itag=18
source=webdrive
mime=video/mp4
ip=171.226.93.247
ipbits=0
expire=1486127839
itag như đã nói, là một param do youtube (dc google mua lại, hiện thuộc sở hữu của google) tự đặt ra, hoàn toàn ko có document chính thống nào mô tả, ngay trong youtube api cũng ko có. Tuy nhiên các anh hùng cào phím trên toàn thế giới qua một thời gian dài quan sát đã tổng hợp lại trên wikipedia ( link ref cuối bài )
source nguồn của file, nhìn vào đây ta có thể đoán dc nguồn của phim tình cảm đang xem là ở drive hay youtube hay picasa.
ip ip của người/server GET.
ipbits false (0) hoặc bằng một số khác 0, nếu bằng false (0) nghĩa là google sẽ ko quan tâm đến ip server GET, tức là link này ai cũng có thể xem dc. Nếu anh em thắc mắc làm sao GET dc link có ipbits bằng 0, hãy đọc tiếp.

Chiêu số 1: 2 tay 2 IP ( IPv4 vs IPv6 )


Các anh hùng cào phím đã nghĩ ra một cách hết sức đơn giản, nếu server GET link có IPv6 còn người xem có Ipv4 thì google sẽ check ip bit như thế nào khi 2 giao thức (protocol) là hoàn toàn khác nhau ?
Thực tế Google ko check bit dc, do đó link GET dùng ipv6 thì tất cả client IPv4 đều xem được và ngược lại.
Áp dụng trò này, các trang phim sẽ detect IP của người xem, và dựa vào đó để trả về link stream tương ứng.
Công thức rất đơn giản là:
người xem có ipv4 => link phim ipv6
người xem có ipv6 => link phim ipv4

Chiêu số 2: lấy tiền đè người (google gsuite for business)

Nếu anh em có acc gsuite for business của google, thì hãy dùng acc đó để request link get_video_info, kết quả trả về có ipbits = 0 do đó video link get ra ai cũng có thể xem dc bất kể ipv4 hay v6, không cần phải kiểm tra ip của client nữa.
Áp dụng 1 trong 2 cách trên, chúng ta có thể qua mặt google về vụ giới hạn ip, tuy nhiên còn 1 vấn đề rất quan trọng là link get ra thỉnh thoảng có 1 số người không coi dc, tỉ lệ này rất ngẫu nhiên, vì sao ?

Qua mặt hệ thống Google Global Cache (GGC)

Lượng dữ liệu truyền đi từ server của google là rất lớn, do đó nó cần 1 hệ thống phân phối dữ liệu phân tán đi khắp các nơi trên thế giới. Đảm bảo khi user xem phim, phim đó phải dc lấy về từ 1 con server có tốc độ nhanh nhất và gần nhất đối với user đó, từa tựa CDN chắc anh em cũng chả lạ gì.
Nói 1 cách đơn giản, hệ thống này của google hoạt động như 3 bước bên dưới:
  1. Các internet provider như viettel, fpt, vdc đưa 1 số máy chủ cho google quản lý. Các máy chủ này sẽ dc hoà vào mạng lưới google edge network và trở thành 1 trung tâm lưu cache cho phim tình cảm (GGC location)
  2. Khi user truy cập, google sẽ detect IP và provider của user, các bạn ko đọc nhầm, google biết bạn đang dùng internet của viettel hay fpt, thậm chí biết dc chính xác gói cước internet của bạn.
  3. Nếu dãy ip và provider của user này nằm trong GGC, nó sẽ redirect user về một trong các server lưu cache đó. Giờ hãy nhìn lại URL link phim mà các bạn lấy dc: https://r15---sn-i3b7knez.c.drive.google.comthấy chứ r15---sn-i3b7knez con server r15 này nằm ở malaysia vì mình dùng viettel gói viettel-sgn20, mà malaysia khỏi phải nói nằm kế bên nhau hehe cách nhau mổi cây cầu dừa.
Lý do 1 số đồng nghiệp không xem dc video nếu bạn gởi link trên qua là vì dãy ip và internet provider của đồng nghiệp khác mạng lưới GGC. Do đó bị 403.
Để qua mặt dc GGC, hay nói các khác bắt GGC redirect user về đúng location cache, chúng ta cần quay ngược thời gian lại năm 2005. Vào năm đó, google như bao thanh niên trẩu tre khác quyết định làm web phim.
Google mua domain googlevideo.com và hào hứng bừng bừng triển ngay dự án, kết quả tất nhiên là dự án chạy dặt dẹo và nhanh chóng khuất-núi. Sau đó, như các bạn đã biết google mua lại youtube.
Tuy nhiên một tài nguyên vô giá là domain redirector.googlevideo.com vẫn tồn tại, nó tiếp tục dc sử dụng và các anh hùng cào phím nhanh chóng nhận ra đây mà 1 mắt xích rất quan trọng trong google global cache. Nếu các bạn đá user về redirector.googlevideo.com, nó sẽ tự detect user ip và ngay lập tức redirect user về location đúng.
Đó là lý do sau khi lấy dc link video, chúng ta cần thay thế domain này https://r15---sn-i3b7knez.c.drive.google.com thành https://redirector.googlevideo.com để tận dụng và bắt GGC làm việc cho chúng ta.
Giờ nếu các bạn chưa tin và nghi ngờ GGC, hãy vào https://redirector.googlevideo.com/report_mapping để biết mình đang dùng internet của hãng nào, và tên gói cước internet đang dùng.
OK bài tut đã quá dài tuy nhiên chúng ta vẫn còn vấn đề cuối cùng.

Link stream videoplayback bị giới hạn bởi COOKIE


Có tất cả 3 endpoint get_video_info cho google drive mà các anh hùng cào phím trên internet tìm được
trong đó ngoại trừ link đầu tiên là mail vẫn còn dùng dc, 2 cái phía sau đều bị dính COOKIE. Vậy dính cookie là sao ?
Khi chúng ta gọi https://drive.google.com/e/get_video_info, trong response header trả về có header set-cookie, có 1 cookie name là DRIVE_STREAM chứa value dùng để playback video, ai gọi thì lụm dc cookie này.
Nếu chúng ta gởi link video lấy dc cho user khác, hiển nhiên máy user đó ko có cookie DRIVE_STREAM dẫn đến videoplayback sẽ bị lỗi 403.
Trước đây cả 3 link đều chạy tốt, giờ còn 1, đây là động thái của google nhằm chặn đường các web phim ?
Cũng cần phải nói link mail cũng chạy rất chập chờn, 10 lần gọi dc vài lần thôi.
Ngoài ra, cũng mới update gần đây link videplayback dùng get_video_info gọi ra có kèm 1 param mới là driveid chứa id thật của video phim tình cảm. Chỉ cần biết id này các hãng có thể report abuse với google để tận diệt các phim vi phạm bản quyền, đều mà trước đây họ ko làm dc vì link redirector ko có id, và lại còn bị expired sau một thời gian nên họ có report thì google cũng ko giải quyết.
Rất nhiều web phim ở vn đang bị lộ driveid do update mới này.
Lại một lần nữa chúng ta thấy google đang thể hiện quyết tâm tiêu diệt các web phim.

Kết bài

Bài đã quá dài, nên tác giả ngưng viết đi nhậu. Nếu đề tài này được anh em ủng hộ và quan tâm tác giả sẽ viết phần 2 với nhiều cảnh hot hơn.


Chào thân ái và quyết thắng !
Previous Post
Next Post

post written by:

0 comments: