我目前正在尝试按照this tutorial学习 FFmpeg API 。但是,关于视频解码的第一课我已经遇到了问题。除了使用C ++外,我的代码与本教程中的代码基本相同。我的问题是视频流与av_read_frame
返回的数据包中的视频流不匹配。
视频流是在可用流上循环播放的,直到找到视频流为止。
for(int i = 0; i < pFormatCtx->nb_streams; i++) { // nb_streams == 2
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break; // videoStream == 0
}
}
然后在检索帧数据时,将接缝抓取音频通道。
while(av_read_frame(pFormatCtx, &packet) >= 0) { // read returns 0
// Is this a packet from the video stream?
if(packet.stream_index == videoStream) {
//packet.stream_index == 1, which correspond to the audio stream
}
}
我没有在线找到该测试实际失败的示例。我有没有想办法指定本教程中没有的stream_index
?也许该教程不是最新的,并且做错了什么?如果是这样,提取帧数据的正确方法是什么?如果有问题,我将在 Windows 64位上使用最新的 FFmpeg 4.0.2 构建,并通过 Visual Studio 2017 进行编译。
在没有声音的视频上,两个流匹配,并且我能够正确解码和显示帧。
答案 0 :(得分:0)
尝试这样:
@objc func imageTapped() {
let imageView = userImageView
let newImageView = UIImageView(image: imageView?.image)
newImageView.frame = UIScreen.main.bounds
newImageView.backgroundColor = UIColor.black
newImageView.contentMode = .scaleAspectFit
newImageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
newImageView.addGestureRecognizer(tap)
self.view.addSubview(newImageView)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = true
}