Google Cast: khái niệm chính, giao thức phát trực tiếp và SDK Cast

Tác giả: IT Sectr Đã đăng: 2026-04-30 Thời gian đọc: 10 phút

Google Cast là công nghệ của Google để phát trực tiếp nội dung đa phương tiện từ thiết bị di động lên TV và hệ thống âm thanh qua giao thức Cast. SDK cho phép nhà phát triển thêm hỗ trợ Chromecast vào ứng dụng Android và iOS, gửi video, âm thanh và hình ảnh lên màn hình lớn. Theo Google Cast Developer Documentation, 2025, hơn 100 triệu thiết bị Chromecast đã được bán trên toàn thế giới và Cast SDK được sử dụng trong hơn 40.000 ứng dụng.

Những điểm chính

  • Google Cast — giao thức và SDK để phát trực tiếp nội dung từ thiết bị di động lên TV và loa
  • Sender — ứng dụng di động gửi nội dung đến thiết bị Cast
  • Receiver — ứng dụng trên TV (Chromecast) nhận và phát nội dung
  • CAF SDK — Cast Application Framework, API đơn giản hóa để tích hợp Cast (được Google khuyến nghị)
  • Media Streams — phát trực tiếp HLS, DASH và MP4 qua Cast với điều khiển phát lại

Google Cast là gì?

Google Cast là giao thức truyền nội dung đa phương tiện không dây do Google phát triển để phát trực tiếp từ thiết bị di động, máy tính xách tay và máy tính bảng lên TV, loa và các màn hình khác. Không giống AirPlay (Apple) hay Miracast, Cast sử dụng mô hình “gửi URL” (send-to-device): ứng dụng di động gửi URL nội dung đến Chromecast và thiết bị tự tải và phát luồng mà không làm nặng điện thoại.

Ưu điểm chính của Google Cast so với phát trực tiếp trực tiếp (screen mirroring) là hiệu quả năng lượng. Sau khi bắt đầu phát lại, điện thoại chỉ hoạt động như điều khiển từ xa: người dùng có thể thu nhỏ ứng dụng, khóa màn hình hoặc chuyển sang ứng dụng khác — video vẫn tiếp tục phát trên TV. Theo Google (2025), Cast tiêu thụ ít hơn 80% năng lượng trên điện thoại so với các giải pháp mirroring.

Google Cast không chỉ hỗ trợ Chromecast mà còn hỗ trợ bộ thu Cast tích hợp trong TV của Sony, TCL, Philips, Hisense và các nhà sản xuất khác với Google TV hoặc Android TV. Cast cũng được hỗ trợ trong hệ thống âm thanh (Nest Audio, Sonos với Cast) và Chromecast Audio. Giao thức Cast hoạt động qua Wi-Fi (2.4/5 GHz) và yêu cầu thiết bị gửi và nhận ở cùng một mạng.

Kiến trúc Cast: Sender, Receiver và giao thức

Kiến trúc Google Cast bao gồm ba thành phần: Sender (ứng dụng di động), Receiver (ứng dụng trên Chromecast/TV) và giao thức vận chuyển. Sender sử dụng Cast SDK để khám phá thiết bị trên mạng, thiết lập kết nối và gửi lệnh phát lại. Receiver là ứng dụng web (HTML5 + CSS + JavaScript) chạy trong trình duyệt Chromecast để tải và phát nội dung.

Giao thức Google Cast dựa trên DIAL (Discovery and Launch) để khám phá thiết bị và giao thức độc quyền qua WebSocket để điều khiển phát lại. DIAL sử dụng SSDP (Simple Service Discovery Protocol) để tìm thiết bị Cast trên mạng cục bộ. Sau khi khám phá, Sender thiết lập kết nối WebSocket với Receiver trên cổng 8008 hoặc 8009 và gửi lệnh ở định dạng JSON: LOAD, PLAY, PAUSE, STOP, SEEK.

Thành phầnNền tảngCông nghệ
SenderAndroid / iOS / ChromeCast SDK (Java/Kotlin, Swift, JS)
Default ReceiverChromecast / Android TVTích hợp sẵn (cấu hình qua Google Cast Console)
Custom ReceiverChromecast / Android TVỨng dụng web (HTML5, CAF Receiver JS)
Giao thứcMạng Wi-Fi cục bộWebSocket + JSON + DIAL/SSDP
Vận chuyển phương tiệnInternetHLS, DASH, MP4 (tải trực tiếp từ Chromecast)

Giao thức Cast v2 để điều khiển phát lại

Sender gửi tới Receiver không phải nội dung mà là URL (URL phương tiện) và siêu dữ liệu (tiêu đề, hình ảnh, phụ đề). Receiver tự tải nội dung từ URL, giúp tiết kiệm pin điện thoại khỏi việc truyền dữ liệu. Sau khi bắt đầu phát lại, Sender có thể gửi lệnh tạm dừng, tua lại, điều chỉnh âm lượng và nhận trạng thái phát lại qua Cast Protocol v2.

Cast Application Framework (CAF): tích hợp nhanh

Cast Application Framework (CAF) là API đơn giản hóa của Google để tích hợp Cast vào ứng dụng di động, được giới thiệu vào năm 2018. CAF thay thế Cast SDK cũ (CastCompanionLibrary) và cung cấp các thành phần UI có sẵn: Cast Button (biểu tượng khám phá thiết bị), Mini Controller (trình phát mini ở cuối màn hình) và Expanded Controller (điều khiển từ xa toàn màn hình). CAF hỗ trợ Android, iOS, Flutter và React Native.

Để sử dụng CAF, nhà phát triển không cần viết Receiver riêng — Google cung cấp Default Receiver tự động tải và phát nội dung. Default Receiver hỗ trợ HLS, DASH, MP4, WebM, MP3, hình ảnh và phụ đề. Cấu hình Receiver được thực hiện trong Google Cast Console — chỉ cần chỉ định URL nội dung và Default Receiver xử lý phần còn lại. Receiver tùy chỉnh chỉ cần thiết cho các kịch bản không chuẩn: UI TV tùy chỉnh, hỗ trợ DRM, hàng đợi phát lại.

kotlin
// Cấu hình Tùy chọn CAF Receiver
val receiverOptions = CastReceiverOptions.Builder(context)
    .setReceiverApplicationId(
        CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
    )
    .build()

// Kết nối Cast Context
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)

Cast Connect: kiểm tra không cần thiết bị vật lý

CAF tự động xử lý vòng đời kết nối: khám phá thiết bị qua Cast Button, thiết lập kết nối, tải phương tiện, tạm dừng khi mất kết nối tạm thời và kết nối lại. CAF cũng hỗ trợ hàng đợi phát lại (media queues) cho danh sách phát và nút Cast trên Màn hình khóa và Trung tâm thông báo (Android). Phiên bản tối thiểu: Android 5.0 (API 21), iOS 14+.

Phát trực tiếp phương tiện: HLS, DASH và MP4 trên Chromecast

Google Cast hỗ trợ các định dạng phát trực tiếp chính: HLS (HTTP Live Streaming) từ Apple, DASH (Dynamic Adaptive Streaming over HTTP) và MP4 tiến triển. Chromecast tự động chọn chất lượng video tối ưu dựa trên tốc độ kết nối internet (tốc độ bit thích ứng). Đối với HLS và DASH, Chromecast chuyển đổi luồng theo thời gian thực mà không dừng phát lại. HLS được hỗ trợ từ phiên bản phần mềm Chromecast 1.28+.

Để phát trực tiếp qua Google Cast, nội dung phải có thể truy cập qua URL công khai (HTTP/HTTPS) — Chromecast tải nội dung trực tiếp từ máy chủ chứ không phải từ điện thoại. DRM (Quản lý quyền kỹ thuật số) được hỗ trợ qua Widevine: Chromecast hỗ trợ Widevine L3 (tất cả thiết bị) và L1 (một số mẫu, ví dụ Chromecast with Google TV). Làm việc với DRM yêu cầu Receiver tùy chỉnh với tích hợp Shaka Player hoặc ExoPlayer. Theo Google, Chromecast with Google TV hỗ trợ 4K HDR với Widevine L1 cho Netflix, Disney+ và các dịch vụ khác.

kotlin
// Tải phương tiện lên Chromecast qua CAF
val mediaInfo = MediaInfo.Builder(Uri.parse(videoUrl))
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType("video/mp4")
    .setMetadata(MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE)
        .putString(MediaMetadata.KEY_TITLE, title)
        .putString(MediaMetadata.KEY_SUBTITLE, subtitle))
    .build()

CastSession.RemoteMediaClient
    ?.load(mediaInfo, autoPlay = true)

Định dạng phụ đề: Chromecast hỗ trợ TTML, WebVTT và CEA-608. Phụ đề được truyền như một phần của MediaInfo qua MediaTrack. Chromecast cũng hỗ trợ tải hình ảnh bất đồng bộ (ảnh) với khả năng vuốt giữa các hình ảnh qua Cast Queue API. Đối với âm thanh, Chromecast hỗ trợ MP3, AAC, FLAC, WAV và OGG. Phát trực tiếp âm thanh qua Google Cast được hỗ trợ trên Chromecast Audio và loa Cast.

Thành phần UI Cast: Cast Button và Mini Controller

Cast Button là thành phần UI chính của Google Cast SDK hiển thị biểu tượng Cast và tự động thay đổi trạng thái: không hoạt động (không có thiết bị), khả dụng (đã tìm thấy thiết bị), đã kết nối (phiên hoạt động). Khi nhấp, Cast Button mở hộp thoại chọn thiết bị. Thành phần có sẵn qua MediaRouteActionProvider (Android) hoặc GCKUICastButton (iOS). Nút Cast chỉ hiển thị khi có thiết bị Cast khả dụng trên mạng — CAF tự động ẩn nút nếu không tìm thấy thiết bị.

Mini Controller là bảng ở cuối màn hình hiển thị tiêu đề nội dung, ảnh bìa, nút phát/tạm dừng và nút đóng phiên. Mini Controller tự động xuất hiện khi phiên Cast đang hoạt động và người dùng ở màn hình không liên quan đến phát lại. CAF cung cấp MiniControllerFragment có sẵn cho Android được nhúng vào bố cục. Theo mặc định, Mini Controller ở cuối màn hình nhưng có thể được đặt ở bất kỳ vị trí nào.

kotlin
// Tùy chỉnh Mini Controller qua Styles
// styles.xml
// <style name="CastMiniControllerStyle"
//     parent="Theme.GoogleCast">
//     <item name="castMiniBackgroundColor">#FF0000</item>
//     <item name="castShowImageThumbnail">true</item>
// </style>

// Điều khiển Mini Controller theo chương trình
val miniController = findViewById<MiniControllerFragment>(
    R.id.miniController
)
miniController.setVisibility(
    isCastSessionActive()
)

Expanded Controller là điều khiển phát lại toàn màn hình trên TV, được mở bằng cách nhấp vào Mini Controller. Expanded Controller hiển thị: tiêu đề, mô tả, ảnh bìa, thanh tiến trình có khả năng tìm kiếm, nút phát/tạm dừng/dừng, danh sách bản nhạc (nếu có trong hàng đợi), điều chỉnh âm lượng và nút ngắt kết nối. CAF cung cấp ExpandedControllerActivity có sẵn tự động khởi chạy. Nếu cần UI tùy chỉnh, hãy mở rộng ExpandedControllerActivity cơ bản.

Receiver tùy chỉnh: giao diện riêng của bạn trên TV

Receiver tùy chỉnh là ứng dụng web (HTML5 + CSS + JavaScript) được tải trên Chromecast khi phiên Cast bắt đầu. Không giống Default Receiver, receiver tùy chỉnh cho phép kiểm soát hoàn toàn giao diện nội dung trên TV: hình nền, hoạt ảnh, điều khiển tùy chỉnh, logo thương hiệu. Receiver tùy chỉnh được đăng ký trong Google Cast Console và nhận ID ứng dụng duy nhất.

Phát triển Receiver tùy chỉnh được thực hiện bằng JavaScript sử dụng Cast Receiver Framework (CAF Receiver). CAF Receiver cung cấp API để xử lý tin nhắn đến từ Sender, quản lý luồng phương tiện, xử lý hàng đợi và tích hợp với DRM. Receiver chạy trong môi trường trình duyệt cô lập trên Chromecast (WebKit) với quyền truy cập DOM hạn chế. Yêu cầu tối thiểu: HTML5, CSS3, JavaScript ES6. Receiver được lưu trữ trên máy chủ HTTPS.

js
// Receiver tùy chỉnh cơ bản trên CAF
const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    (loadData) => {
        // Xử lý tải phương tiện tùy chỉnh
        console.log("Loading media:", loadData.media.contentId)
        return loadData
    }
)

context.start()

// Xử lý tin nhắn tùy chỉnh từ Sender
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
    console.log("Custom data:", event.data)
})

Phát triển và triển khai Receiver tùy chỉnh

Receiver tùy chỉnh phải được kiểm tra trên thiết bị thực qua Cast Developer Console. Google khuyến nghị sử dụng Default Receiver cho các kịch bản tiêu chuẩn và receiver tùy chỉnh chỉ khi cần UI TV tùy chỉnh, hỗ trợ DRM (Widevine) hoặc hàng đợi phát lại với logic tùy chỉnh. Receiver không có quyền truy cập vào DOM trang Sender và không thể thực thi JavaScript được gửi từ Sender (bảo mật).

Ví dụ mã: tích hợp Google Cast trên Android

Một ví dụ hoàn chỉnh về tích hợp Google Cast vào ứng dụng Android sử dụng CAF. Ứng dụng phát video và cho phép phát trực tiếp lên Chromecast qua Cast Button. Mã bao gồm cấu hình CastOptions, khởi tạo CastContext, xử lý kết nối và tải phương tiện lên thiết bị Cast.

kotlin
class CastPlayerActivity : AppCompatActivity() {

    private lateinit var castContext: CastContext

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setupCast()
        setContentView(R.layout.activity_player)
    }

    private fun setupCast() {
        CastOptions.Builder()
            .setReceiverApplicationId(
                CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
            )
            .build()
            .let {
                castContext = CastContext.getSharedInstance(this)
            }
    }

    fun castVideo(videoUrl: String, title: String) {
        val mediaInfo = MediaInfo.Builder(Uri.parse(videoUrl))
            .setContentType("video/mp4")
            .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
            .setMetadata(MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE)
                .putString(MediaMetadata.KEY_TITLE, title))
            .build()

        castContext.sessionManager.getCurrentCastSession()
            ?.remoteMediaClient
            ?.load(mediaInfo)
    }
}

Để kiểm tra Google Cast, hãy sử dụng thiết bị Cast ảo qua Chrome DevTools (tab Cast) hoặc Chromecast vật lý. Google cung cấp ID ứng dụng thử nghiệm — CC1AD845 (Default Media Receiver). Trước khi xuất bản, hãy đăng ký ứng dụng của bạn trong Google Cast Console và nhận ID ứng dụng sản xuất. Cast SDK yêu cầu Google Play Services 21.0.0+ và Android 5.0+.

Sự cố thường gặp và gỡ lỗi Cast

Sự cố phổ biến đầu tiên — Cast Button không hiển thị. Nguyên nhân: các thiết bị không cùng mạng Wi-Fi, Chromecast không hỗ trợ DIAL (phần mềm cũ) hoặc tính năng khám phá Wi-Fi bị tắt trên điện thoại. Giải pháp: kiểm tra điện thoại và Chromecast được kết nối cùng một mạng (2.4 GHz hoặc 5 GHz). Google Cast không hoạt động trên mạng Wi-Fi khách, VPN hoặc mạng doanh nghiệp có cách ly máy khách. Sử dụng Cast Connect để kiểm tra không cần thiết bị vật lý.

Sự cố thứ hai — mất kết nối trong khi phát lại. Chromecast có thể mất kết nối Wi-Fi do tín hiệu yếu, tắc nghẽn kênh hoặc nhiễu từ lò vi sóng (2.4 GHz). Giải pháp: đặt Chromecast gần bộ định tuyến hơn, sử dụng 5 GHz (nếu được hỗ trợ), cấu hình QoS cho lưu lượng Chromecast. Trong ứng dụng, xử lý callback onRemoteMediaPlayerStatusUpdated với trạng thái IDLE và lý do lỗi — khi mất kết nối, hiển thị thông báo và đề xuất kết nối lại.

Sự cố thứ ba — nội dung không phát được trên Chromecast. Kiểm tra: URL nội dung có thể truy cập từ internet (Chromecast tải nội dung trực tiếp, không qua điện thoại), định dạng được Chromecast hỗ trợ và không có chặn CORS (cho .m3u8 và .mpd). Nếu sử dụng Default Receiver, hãy đảm bảo ID ứng dụng chính xác. Đối với Receiver tùy chỉnh, hãy kiểm tra ứng dụng được lưu trữ trên HTTPS. Sử dụng Cast SDK Logger để gỡ lỗi: CastContext.getSharedInstance().setCastLogger(...).

Câu hỏi thường gặp

Google Cast khác gì so với AirPlay và Miracast?

Google Cast sử dụng mô hình “gửi URL” — điện thoại gửi Chromecast một liên kết nội dung, được tải trực tiếp. AirPlay (Apple) là giao thức tương tự cho hệ sinh thái Apple. Miracast là phản chiếu màn hình trực tiếp làm nặng điện thoại. Cast tiêu thụ ít hơn 80% pin điện thoại và cho phép thu nhỏ ứng dụng mà không dừng phát lại.

Tôi có cần Chromecast để Google Cast hoạt động không?

Google Cast không chỉ hoạt động trên Chromecast mà còn trên TV có Google TV tích hợp, Android TV, cũng như hệ thống âm thanh có hỗ trợ Cast (Nest Audio, Sonos). Để phát triển và kiểm tra, bạn có thể sử dụng thiết bị Cast ảo thông qua Chrome DevTools. Để tích hợp Cast vào ứng dụng, không cần thiết bị vật lý — sử dụng Cast Connect để mô phỏng.

Google Cast có hỗ trợ 4K và HDR không?

Có, Chromecast with Google TV (2020) và các mẫu mới hơn hỗ trợ 4K HDR với Dolby Vision, HDR10 và HDR10+. Chromecast tiêu chuẩn (thế hệ thứ 3) hỗ trợ 1080p 60fps. Chromecast Ultra — 4K HDR. Để phát trực tiếp 4K, cần tốc độ internet ít nhất 25 Mbps và hỗ trợ Widevine L1 cho nội dung DRM (Netflix, Disney+).

Làm cách nào để dừng phiên Cast theo chương trình?

Để dừng phiên, hãy gọi CastSession.endSession(boolean stopCasting) với true nếu bạn cần dừng phát lại trên TV hoặc false nếu bạn chỉ muốn ngắt kết nối điện thoại. Bạn cũng có thể sử dụng phương thức stop() trên RemoteMediaClient. Người dùng cũng có thể dừng phiên qua Cast Button hoặc Mini Controller bằng cách nhấn nút ngắt kết nối.

Tôi có thể gửi dữ liệu tùy chỉnh qua Google Cast không?

Có, thông qua tin nhắn tùy chỉnh (custom messages). Sender gửi tin nhắn qua một namespace (ví dụ: urn:x-cast:custom.namespace) với đối tượng JSON tùy ý. Receiver xử lý tin nhắn qua addCustomMessageListener. Tin nhắn tùy chỉnh chỉ được hỗ trợ với Receiver tùy chỉnh — Default Receiver không xử lý các namespace tùy chỉnh. Kích thước tin nhắn tối đa là 64 KB.

Tổng kết

  • Google Cast — giao thức phát trực tiếp nội dung từ thiết bị di động lên TV qua Chromecast và Android TV
  • Kiến trúc — Sender (ứng dụng) gửi URL nội dung, Receiver (Chromecast) tải và phát
  • CAF SDK — Cast Application Framework với các thành phần có sẵn: Cast Button, Mini Controller và Expanded Controller
  • Định dạng — HLS, DASH, MP4, WebM, MP3, AAC, FLAC với tốc độ bit thích ứng và phụ đề
  • Default Receiver — bộ thu tích hợp của Google để tích hợp nhanh mà không cần viết mã phía TV
  • Receiver tùy chỉnh — ứng dụng web bằng HTML5/JS để tùy chỉnh giao diện và DRM trên TV
  • Gỡ lỗi — kiểm tra mạng Wi-Fi, URL nội dung và hỗ trợ định dạng; sử dụng Cast SDK Logger

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm