Android端如何通过编程将不同URI的音视频同步投屏到Chromecast?
分离音视频URI合并投送Chromecast的方案
可行,Chromecast支持投送分离的音视频流,核心是通过Cast SDK的媒体轨道配置实现,以下是具体实现步骤:
实现步骤
1. 确认接收器兼容性
如果使用官方默认的Styled Media Receiver,无需额外开发,它原生支持分离音视频流的播放;如果是自定义Receiver应用,只需确保基于Cast Receiver SDK开发,且未过滤多轨道媒体请求即可。
2. 发送端构造媒体请求
在发送端(Android/iOS/Web),通过MediaInfo对象配置分离的音视频轨道:
- 创建两个
MediaTrack实例,分别指定类型为VIDEO和AUDIO,并关联对应的URI - 将两个轨道添加到
MediaInfo的mediaTracks数组中 - 主
contentType以视频流的MIME类型为准(如video/mp4)
Web端代码示例
// 初始化Cast会话后构造媒体请求 const mediaInfo = new chrome.cast.media.MediaInfo('你的视频URI', 'video/mp4'); // 配置视频轨道 const videoTrack = new chrome.cast.media.MediaTrack(1, chrome.cast.media.MediaTrackType.VIDEO); videoTrack.contentId = '你的视频URI'; // 配置音频轨道 const audioTrack = new chrome.cast.media.MediaTrack(2, chrome.cast.media.MediaTrackType.AUDIO); audioTrack.contentId = '你的音频URI'; mediaInfo.mediaTracks = [videoTrack, audioTrack]; const loadRequest = new chrome.cast.media.LoadRequest(mediaInfo); castSession.loadMedia(loadRequest) .then(() => console.log('音视频流加载成功')) .catch(error => console.error('加载失败:', error));
Android端核心代码示例
val mediaInfo = MediaInfo.Builder("你的视频URI") .setContentType("video/mp4") .build() // 添加视频轨道 val videoTrack = MediaTrack.Builder(1, MediaTrack.TYPE_VIDEO) .setContentId("你的视频URI") .build() // 添加音频轨道 val audioTrack = MediaTrack.Builder(2, MediaTrack.TYPE_AUDIO) .setContentId("你的音频URI") .build() mediaInfo.mediaTracks = listOf(videoTrack, audioTrack) val loadRequest = LoadRequest.Builder(mediaInfo).build() castSession.remoteMediaClient.load(loadRequest)
3. 关键注意事项
- 音视频流的编码格式必须符合Chromecast支持列表,推荐使用H.264视频+AAC音频组合
- 确保音视频流的时长完全同步,否则会出现音画错位问题
- 如果自定义Receiver需要处理多轨道,需在
LOAD事件回调中正确解析mediaTracks字段,不要丢弃分离的音视频信息
内容的提问来源于stack exchange,提问作者Ankur Adlakha
相关产品推荐
相关产品推荐

