【发布时间】:2016-09-11 15:48:40
【问题描述】:
我成功地将带有 NanoHttpd 的视频从我的 Android 应用程序流式传输到本地 IP 以在 chromecast 上播放。 现在我想添加字幕,我的 sdcard 上有本地 .vtt 文件,我也试图在不同端口上的 NanoHttpd 上对其进行蒸汽处理。 反正我看不到字幕。我在视频和字幕本地 ips 上正确实现了 CORS。 如果我在浏览器上键入字幕 ip,vtt 文件将成功显示。
当我在 MediaInfo 上设置字幕时,我的代码被剪掉了:
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
.setName("English Subtitle")
.setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
.setContentId(ipdeviceForSubs)
.setLanguage("en-US")
.build();
MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
mediaMetadata.putString(MediaMetadata.KEY_TITLE, contentUri.getLastPathSegment());
mSelectedMedia = new MediaInfo.Builder(ipdeviceForVideo != null ? ipdeviceForVideo : contentUri.toString())
.setContentType("video/*")
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setMetadata(mediaMetadata)
.setMediaTracks(Arrays.asList(englishSubtitle))
.build();
这是我的 NanoHttpd 字幕网络服务器实现
public class WebserverSubtitles extends NanoHTTPD {
public WebserverSubtitles() throws IOException {
super(8081);
}
@Override
@SuppressWarnings("deprecation")
public NanoHTTPD.Response serve(String uri, Method method, Map<String, String> headers, Map<String, String> parms, Map<String, String> files) {
try {
FileInputStream localFileInputStream = new FileInputStream("/sdcard/Download/v.vtt");
NanoHTTPD.Response localResponse = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/vtt", localFileInputStream);
localResponse.addHeader("Access-Control-Allow-Origin", "*");
localResponse.addHeader("content-type", "text/vtt");
return localResponse;
} catch (Exception localException) {
localException.getMessage();
}
return null;
}
}
感谢任何帮助,谢谢
【问题讨论】:
-
在接收器上开启登录后,在控制台看到什么?
-
我目前正在使用默认接收器,无法查看日志
-
如果我使用它作为我的 mediatrack 字幕的 contentId 工作正常:commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/… 我在我的 sd 上复制了完全相同的文件,使用具有 CORS 支持的 NanoHttpd 进行流式传输,什么都没有.. NanoHttpd 网络服务的服务方法不是事件调用。如果我在浏览器中打开相同的本地地址,vtt 文件会正确显示并调用服务方法。看起来本地字幕地址从未被 cast api 调用。
-
我怀疑这两个问题之一可能是问题:CORS 没有正确实现(curl -v
为视频和轨道的标题说明了什么)?或者在将曲目添加到混音中时它可能需要 https 的其他可能性(然后在您的场景中会失败)。您可以注册一个样式接收器以查看日志,这应该有助于识别问题。 -
我试过 curl -v MYURL 并且我得到了这个标题: * 重建 URL 到:192.168.1.101:8081/ * 尝试 192.168.1.101... * 连接到 192.168.1.101 (192.168.1.101)端口 8081 (#0) > GET / HTTP/1.1 > 主机:192.168.1.101:8081 > 用户代理:curl/7.43.0 > 接受:/ >