相关疑难解决方法(0)

如何检测MPMediaItem是否代表iOS上受DRM保护的音轨

我想知道代表音乐曲目的MPMediaItem是否适用于受Fairplay/DRM保护的项目.有什么办法吗?

iphone drm mpmediaitem

19
推荐指数
3
解决办法
1万
查看次数

在OS X上显示带有AVFoundation AVPlayer的字幕

在OS X上使用AVFoundation播放视频时,我正在尝试显示字幕.

我查看了文档,但找不到启用字幕轨道的方法.API包含对字幕轨道的多个引用,这使我相信它是受支持的.

在iOS上,该方法-[AVPlayerItem selectMediaOption:inMediaSelectionGroup:]用于启用字幕轨道.此方法在10.7 SDK中不可用.还有另一种显示字幕的方法吗?

编辑:Quicktime播放器X具有字幕支持,例如在打开此电影时,字幕子菜单似乎提供语言选择,并在选择英语时显示它们.这让我相信它们已包含在API中......

macos cocoa objective-c avfoundation

16
推荐指数
1
解决办法
6633
查看次数

将HTTP流插入AVMutableComposition

我试图插入指明了AVPlayerItem的AVURLAsset AVPlayerItemStatusReadyToPlayAVMutableComposition这样:

composition_ = [[AVMutableComposition alloc] init];
insertionPoint_ = kCMTimeZero;
item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]] retain];
[item_ addObserver:self forKeyPath:@"status" options:0 context:nil];
player_ = [[AVPlayer playerWithPlayerItem:item_] retain];
[player_ addObserver:self forKeyPath:@"currentItem.duration" options:0 context:nil];


/**
 * append a player-item to our composition 
 */
- (void)addItemToComposition:(AVPlayerItem *)item
{
    NSError *error = nil;
    VTRACE(@"item duration: %g", CMTimeGetSeconds(item.duration));
    if (![composition_ insertTimeRange:CMTimeRangeMake(kCMTimeZero, item.duration) 
                              ofAsset:item.asset
                               atTime:insertionPoint_ 
                                error:&error]) 
    {
        VTRACE(@"error: %@", error);
    }
}

/**
 * simplified value observer callback
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary …
Run Code Online (Sandbox Code Playgroud)

iphone avfoundation ios avplayer avcomposition

14
推荐指数
1
解决办法
2116
查看次数

如何在iOS客户端上将外部WebVTT字幕添加到HTTP Live Stream中

我们有通过bitmovin.com编码的视频,并以HTTP Live Streams(Fairplay HLS)的形式提供,但字幕虽然是WebVTT格式,但是作为整个文件的直接URL单独公开,而不是单个段,并且不是HLS m3u8播放列表的一部分.

我正在寻找单独下载的外部.vtt文件如何仍然包含在HLS流中并作为AVPlayer中的副标题提供的方式.

我知道Apple的建议是将分段的VTT字幕包含在HLS播放列表中,但我现在无法改变服务器实现,所以我想澄清是否有可能为AVPlayer提供字幕以与HLS流一起播放.

关于这个主题的唯一有效帖子声称它是可能的:AVPlayer/MPMoviePlayerController的字幕.但是,示例代码从bundle加载本地mp4文件,我正在努力使其适用于m3u8播放列表AVURLAsset.实际上,我有问题从远程m3u8流中获取videoTrack作为asset.tracks(withMediaType: AVMediaTypeVideo)返回空数组.任何想法,如果这种方法可以用于真正的HLS流?或者有没有其他方法可以使用HLS流播放单独的WebVTT字幕,而不将它们包含在服务器上的HLS播放列表中?谢谢.

func playFpsVideo(with asset: AVURLAsset, at context: UIViewController) {

    let composition = AVMutableComposition()

    // Video
    let videoTrack = composition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)

    do {

        let tracks = asset.tracks(withMediaType: AVMediaTypeVideo)

        // ==> The code breaks here, tracks is an empty array
        guard let track = tracks.first else {
            Log.error("Can't get first video track")
            return
        }

        try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, asset.duration), of: track, at: kCMTimeZero)

    } catch {

        Log.error(error)
        return …
Run Code Online (Sandbox Code Playgroud)

avfoundation http-live-streaming ios avplayer avkit

5
推荐指数
1
解决办法
1294
查看次数