首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取MPEG-TS流媒体信息

获取MPEG-TS流媒体信息
EN

Stack Overflow用户
提问于 2014-07-07 12:44:05
回答 1查看 2.3K关注 0票数 1

我正在制作一个播放器,它可以播放一个MPEG-TS流,并同时显示它的所有视频(为了监视目的),在一个框架内使用Xuggler for JAVA。

我的问题是确定这个流包含哪些节目(电视节目)以及它的流是什么.

例如:音频流1和视频流3属于"BBC“节目。

现在,通过使用如下所示的.ts http://mediaarea.net/en/MediaInfo/,我已经让它用于一个MediaInfo文件:

MediaInfo.exe -LogFile="log.txt“”一些.ts文件“。它记录的文件如下:

代码语言:javascript
复制
Menu #2
ID                                       : 1001 (0x3E9)
Menu ID                                  : 1202 (0x4B2)
Duration                                 : 13mn 33s
List                                     : 2001 (0x7D1) (MPEG Video) / 3002 (0xBBA) (MPEG Audio, English)
Language                                 :  / English
Service name                             : NBN
Service provider                         : NILESAT
Service type                             : digital television
UTC 2006-03-28 00:00:00                  : en:NBN / en:Nilesat /  /  / 99:00:00 / Running

然后我用java解析了这个文件。

但是,我需要对一个活动流执行此操作,当我给MediaInfo一个URL而不是一个文件时,它会产生以下错误:

没有找到Libcurl库

我也尝试过vlc命令,但事实证明它没有这个选项,而且只在gui (显示编解码器信息)中可用.

球员已经在工作了,我也有一个提取器.只需要这些媒体信息就行了..。有什么想法吗?

编辑:我发现FFprobe与FFmpeg http://www.ffmpeg.org/捆绑在一起可以完成任务,但由于某种原因,我无法从输入流中读取任何内容。以下是输出的样子:

代码语言:javascript
复制
Input #0, mpegts, from 'D:\record ts\PBR_REC_20140426094852_484.ts':
Duration: N/A, start: 6164.538011, bitrate: N/A
Program 1201
Metadata:
  service_name    : Arabica TV
  service_provider: Nilesat
Stream #0:10[0x7db]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv42
0p(tv), 720x576 [SAR 16:15 DAR 4:3], max. 2348 kb/s, 25 fps, 25 tbr, 90k tbn, 50
tbc
Stream #0:4[0xbcf]: Audio: mp2, 48000 Hz, stereo, s16p, 384 kb/s
Program 1202

我在JAVA中尝试过这个:

代码语言:javascript
复制
 try {
        Process process ;
        
        Scanner sc;
        ProcessBuilder processBuilder = new ProcessBuilder("C:\\Users\\vlatkozelka\\Desktop\\ffmpeg-20140623-git-ca35037-win64-static\\bin\\ffprobe.exe","-i",filename);
        
        process=processBuilder.start();
        sc=new Scanner(process.getInputStream());
        process=processBuilder.start();
        while(sc.hasNext()){
            System.out.println(sc.nextLine());
        }
        
    } catch (IOException ex) {
        Logger.getLogger(ChannelDivider.class.getName()).log(Level.SEVERE, null, ex);
    }

但是sc.hasNext()就像没有输入一样挂起,然后我尝试用>>写入一个带有cmd的文件,但是它给了我一个空白文件

然而,使用FFprobe -h (帮助命令)尝试这两种方法确实提供了输出,这让我非常困惑,我在cmd中看到了输出,但无法读取它.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 22:33:54

我刚刚解决了这个问题,并希望有人可以利用它:原来FFprobe是写给stderr的,而不是stdout,所以没有:

代码语言:javascript
复制
getInputStream()

我用:

代码语言:javascript
复制
getErrorStream()

现在我要做的就是解析这个:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24610913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档