Tôi tự build App xem phim.
nodejs
85
animes
1
White

Đạt Fix viết ngày 14/05/2020

Vấn đề hiện tại

Mặc dù hiện cũng khá lớn tuổi, nhưng mình đặc biệt thích xem animes, nhưng hầu như website xem phim hiện tại không đáp ứng được nhu cầu của bản thân: Nhiều quảng cáo, các bộ cũ hay bị die link, không tự động xem được tập tiếp theo, hay phải dùng chuột để có thể điều khiển player ..., một ngày đẹp trời mình biết tới opensource Popcorn-Time, vậy là quyết tâm fork về rồi tự xây dựng App xem phim cho riêng mình vậy.

Để có thể build được app xem phim, mình gặp nhiều vấn đề nhưng chốt lại thì có 2 cái chính cần giải quyết:

  • Nguồn phim ở đâu đây?
  • Nơi lưu trữ phim, phải lưu hơn 14TB phim ở đâu đây?

Thật sự với cái bản tính lười biếng của mình thì mình nghĩ ngay tới việc cào dữ liệu phim cho nhanh, cho nên dạo hết 1 vòng các trang web animes thì mình thấy animet.net là có số lượng phim nhiều và đầy đủ nhất: hơn 3500 bộ với hơn 60000 episodes, huk nhiều đấy chứ bộ. Bắt tay cào thôi. À vì đây là app xem phim nên sẽ không cạnh tranh ngược lại với nguồn phim, mình chỉ phục vụ nhu cầu cá nhân chứ không có ý định ăn cắp rồi mang đi kinh doanh đâu, sau này họ có nhu cầu dùng thì mình sẽ cung cấp lại API lấy link cho player của họ, coi như là backup phim dùm họ thôi mà.

Chi tiết quá trình code để cào thì mình không muốn trình bày vì ảnh hưởng tới animet.net, nhưng cơ bản thì ngày nay hầu như website phim nào cũng dùng jwplayer và chia nhỏ file gốc thành nhiều chunk nhỏ, mình chỉ việc bắt hết link của từng chunk và tải về, sau đó sử dụng
merge-files của nodejs để nối các file lại, sau đó dùng fluent-ffmpeg để convert từ chuẩn h264 sang mp4 là xong. Có một điều cực kỳ hấp dẫn ở đây là quá trình cào mình chẳng tốn 1 xu để đầu tư server cào, mình sử dụng server miễn phí của thằng google console cloud.
alt text
alt text
Server này hoàn toàn miễn phí, nhưng có quota là được free tối đa 50 hours/tuần, cứ sau 20 phút không có key nào được enter thì sẽ shutdown. Bandwidth download/upload nếu mình không nhầm thì không được download/upload liên tục quá 2 MB/s.
alt text

Bản tính sài chùa của mình trỗi dậy nên đã tạo hơn 20 accounts google, thế là có hơn 20 cái VPS để sài rồi, quá dư luôn. Trong nodejs có package throttle, package này sẽ giới hạn tốc độ đọc ghi ổ cứng từ đó giới hạn tốc độ download/upload. Ví dụ trường hợp upload lên onedrive:

       request.put({
        url: uploadUrl,
        headers: {
            'Content-Length': chunk.clen,
            'Content-Range': chunk.cr,
            'Content-Type': mimeType,
        },
        body: fs.createReadStream(filePath, {
          encoding: null,
          start   : chunk.bstart,
          end     : chunk.bend + 1
        }).pipe(new Throttle(parseInt(UL_BANDWIDTH)))
      }, function(error, response, body) {
      })

Nếu upload tới google drive thì vầy:

       let fileMetadata = {
          name: file.fileName,
          parents: parents
        }

        let media = {
            mimeType: file.mimeType,
            body: fs.createReadStream(filePath).pipe(new Throttle(parseInt(UL_BANDWIDTH)))
        }

        self.drive.files.create({
            resource: fileMetadata,
            media: media,
            fields: "id"
        }, (err, fileInfo) => {
          if (err) {
            logger.error("Upload file to google drive failed: " + err.message)
            return reject(err)
          }

          logger.info(`Uploaded ${file.fileName} to google drive, id: ${fileInfo.data.id}`)
          return resolve(fileInfo.data.id)
        })
      })

Với vấn đề thứ 2 thì mình nghĩ ngay tới onedrive nếu có domain .edu thì được miễn phí 25TB còn google drive thì unlimit nếu có email sinh viên. Xui cái là sau khi upload hơn 10TB lên google drive thì bị trường thông báo xóa email nên bây giờ chỉ còn lại onedrive thôi.
alt text

Cuối cùng thì đây là kết quả, trải nghiệm xem phim được nâng lên tầm cao mới:
alt textalt text
Tự động play tập tiếp theo
alt text

Mã nguồn được public tại: Popcorn VN

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Đạt Fix

3 bài viết.
55 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
72 8
Bài viết này sẽ hướng dẫn các bạn sử dụng Discord để làm ứng dụng theo dõi bất kỳ thứ gì các bạn muốn hay cần. Bối cảnh: Hôm bữa thấy người ta đăn...
Đạt Fix viết gần 2 năm trước
72 8
White
5 0
4 Vé Vietlott Vô Chủ Mình có thói quen mỗi chủ nhật thì mần 1 vé vietlott cho vui cũng xem như là có cái gì đó để mà hi vọng. Cũng như bao nhiêu n...
Đạt Fix viết hơn 1 năm trước
5 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
55 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!