检测当前正在播放的媒体是Android中的音频或视频

问题描述:

在我的应用程序中,我正在管理用户播放音频与否。 请注意,我的应用程序不是音乐播放器,而是监视用户通过音乐应用程序播放音频的监视应用程序。检测当前正在播放的媒体是Android中的音频或视频

为此,我使用MediaSessionManager和MediaController。

当活动媒体会话发生变化时(例如,用户播放/停止音乐),MediaSessionManager将此事件通知给听众(包括我的应用程序),并且我可以为活动媒体会话获取MediaController。

我面临的问题是,即使我播放本地视频文件或流式视频(即不是音乐),MediaSessionManager也会将活动会话通知给我的应用程序。

有什么解决方法或解决方法了解当前正在播放的媒体是音乐还是视频?

+0

真的没有办法告诉如果有人使用视频播放器的音频。我的意思是,即使它有实际的视频(比如说音乐视频),他们可能不会看它,只是在倾听。您至多可以分辨出是否存在视频组件,而不是其实际的音乐内容。 –

音频没有帧率。因此,您可以使用此属性来检测音频与视频。 https://developer.android.com/reference/android/media/MediaFormat.html

示例代码:

MediaExtractor extractor = new MediaExtractor(); 
try { 
    extractor.setDataSource(...); 
    int numTracks = extractor.getTrackCount(); 
    for (int i = 0; i < numTracks; ++i) { 
    MediaFormat format = extractor.getTrackFormat(i);   
    if (format.containsKey(MediaFormat.KEY_FRAME_RATE)) { 
     /* this is video file */ 
     }  
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
}finally { 
    //Release stuff 
    extractor.release(); 
}