FFmpeg讀取Mac攝像頭的問題
在這篇文章中講解了怎麼使用FFmpeg讀取攝像頭,包括Windows,Linux和Mac。經過測試,發現在Mac 下avformat_open_input總是出錯,提示Input/Output error。後來發現對於Mac下通過avfoudmation讀取攝像頭,需要提前設定framerate和video_size。正確的程式碼如下:
#include <iostream>
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include <libavdevice/avdevice.h>
}
using namespace std;
int main(int argc, const char *argv[]) {
int ret = 0;
int videoStreamIndex = -1;
AVFormatContext *s = NULL;
AVDictionary *options = NULL;
AVCodecParameters *par = NULL;
AVCodec *codec;
AVCodecContext *cctx;
av_register_all();
avdevice_register_all();
AVInputFormat *ifmt = av_find_input_format("avfoundation");
av_dict_set(&options, "framerate", "30", 0);
av_dict_set(&options, "video_size", "1280x720", 0);
ret = avformat_open_input(&s, "0", ifmt, &options);
if (ret < 0) {
cout << av_err2str(ret) << endl;
goto error;
}
ret = avformat_find_stream_info(s, NULL);
if (ret < 0) {
cout << av_err2str(ret) << endl;
goto error;
}
for (uint i = 0; i < s->nb_streams; i++) {
if (s->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
videoStreamIndex = i;
break;
}
}
if (-1 == videoStreamIndex) {
cout << "can't find video stream" << endl;
goto error;
}
par = s->streams[videoStreamIndex]->codecpar;
codec = avcodec_find_decoder(par->codec_id);
cctx = avcodec_alloc_context3(codec);
avcodec_parameters_to_context(cctx, par);
ret = avcodec_open2(cctx, codec, NULL);
if (ret < 0) {
cout << av_err2str(ret) << endl;
goto error;
}
error:
if (s) {
avformat_free_context(s);
}
if (cctx) {
avcodec_free_context(&cctx);
}
if (options) {
av_dict_free(&options);
}
return ret;
}
問題是framerate和video_size是怎麼來的呢?雖然可以通過list_devices的日誌輸出可以看到提示,但是在libavdevice(avdevice.h)中定義的一些API,對於avfoundation都是未實現的操作,不能通過
avdevice_capabilities_create查詢裝置的能力引數。
相關文章
- JavaCV FFmpeg採集攝像頭YUV資料Java
- 海康威視攝像頭重置密碼問題密碼
- openCV開啟高畫質攝像頭卡頓的問題OpenCV
- Ubuntu下編譯安裝OpenCV 2.4.7並讀取攝像頭Ubuntu編譯OpenCV
- Python opencv USB攝像頭 讀寫PythonOpenCV
- 讀取多個(海康\大華)網路攝像頭的視訊流 (使用opencv-python),解決實時讀取延遲問題OpenCVPython
- Unity 3d UI獲取外部攝像頭拍攝Unity3DUI
- Nebulosity 4 for Mac(攝像頭影像捕獲工具)Mac
- 攝像頭十大常見問題和解決方法
- 攝像頭操作指南
- ToDesk勾上攝像頭會看到我嗎?如何關閉攝像頭
- 《OpenCV設定和獲取攝像頭引數》OpenCV
- FFmpeg實現監控攝像頭的RTSP協議轉RTMP協議直播協議
- 攝像頭黑屏怎麼辦 各種攝像頭不能用的解決方法
- 安卓呼叫攝像頭拍照安卓
- Android呼叫攝像頭Android
- .NET 攝像頭採集
- 智慧家居安全問題多 聯網攝像頭易成重災區
- WebRTC從攝像頭獲取圖片傳入canvasWebCanvas
- 【Android】魅族Flyme OS 3攝像頭無法預覽的問題Android
- Win10攝像頭如何開啟_WIN10攝像頭在哪裡Win10
- 搭建一個攝像頭應用程式 應用程式內部攝像頭
- 攝像頭不能用怎麼辦 攝像頭不能用解決辦法
- Android提供的攝像頭拍照Android
- java 在windows下怎麼訪問攝像頭?JavaWindows
- H5超級播放器+FFmpeg實現攝像頭線上檢視H5播放器
- Win10怎麼開啟攝像頭 win10開啟攝像頭的方法Win10
- 某CCTV攝像頭漏洞分析
- android opencv 前置攝像頭AndroidOpenCV
- Android呼叫攝像頭拍照Android
- android 開啟攝像頭Android
- jQuery webcam plugin呼叫攝像頭jQueryWebPlugin
- 人工智慧"眼睛"——攝像頭人工智慧
- WebRTC開啟本地攝像頭Web
- 修正Android攝像頭APIAndroidAPI
- Android 呼叫攝像頭拍照Android
- Android如何呼叫攝像頭Android
- 新版Chrome http訪問無法開啟攝像頭ChromeHTTP