繁体   English   中英

如何在iOS中播放.h264

[英]how to play .h264 in iOS

我想播放视频,格式为video.h264

我已经尝试过AVPlayerMPMoviePlayerViewController

但是,我没玩。 有没有办法做到这一点。 任何其他可实现相同目的的库

首先,请阅读这篇文章。 H.264流的序列/图片参数集的可能位置

.h264文件为附件b格式。 接下来阅读:

https://developer.apple.com/reference/videotoolbox/vtdecompressionsession

从附件b转换为avcc,在打开解压缩会话时设置Extradata。 解码帧->显示帧。

这是一些执行此操作的代码:

- (void)viewDidLoad {
  [super viewDidLoad];
  UIView *view = self.view;
  NSString *resourceName = @"SunSpot_1080p_main.m4v";
  NSString* movieFilePath = [[NSBundle mainBundle]
    pathForResource:resourceName ofType:nil];
  NSAssert(movieFilePath, @"movieFilePath is nil");
  NSURL *fileURL = [NSURL fileURLWithPath:movieFilePath];

  AVPlayerViewController *playerViewController =
    [[AVPlayerViewController alloc] init];
  playerViewController.player =
    [AVPlayer playerWithURL:fileURL];
  self.avPlayerViewcontroller = playerViewController;
  [self resizePlayerToViewSize];
  [view addSubview:playerViewController.view];
  view.autoresizesSubviews = TRUE;
}

完整的源代码和github链接可以在我关于该主题的博客文章中找到。 与以前的API相比,这种新的播放器视图控制器非常容易,实际上没有任何东西。

除非最近有所变化(在视频世界中总是可能的……),iOS不支持“原始” h264视频播放-例如MyVideoFile.h264。

值得一提的是,如果将视频流式传输到iOS设备,则视频通常会像这样包装:

  • 原始像素位图
  • 原始像素编码(egh264编码)
  • 编码的视频流与音频流,字幕等一起打包到容器中(例如mp4容器)
  • 容器分成“块”或分段进行流式传输(在iOS上使用HLS流式传输格式)

如果您的视频很短,则可能只需要将其打包到mp4容器中即可播放,即可从原始文件创建MyVideoFile.mp4。

如果更长,并且要进行流传输,则通常还必须使用HLS流传输格式,因为这是Appel的规则之一(请参阅https://developer.apple.com/library/content/documentation/NetworkingInternet /Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html#//apple_ref/doc/uid/TP40008332-CH102-SW5 ):

如果您的应用通过蜂窝网络提供视频,并且视频持续时间超过10分钟或在5分钟内超过5 MB数据,则您需要使用HTTP Live Streaming。 (渐进式下载可能用于较小的剪辑。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM