ffmpeg avformat_open_input () не удалось открыть URL-адрес устройства dshow, содержащий китайские иероглифы - PullRequest
1 голос
/ 28 апреля 2020

С веб-камерой USB все в порядке, но я хочу использовать «виртуальную камеру» с именем «无 他 伴侣 (竖 屏)», чье видео со смартфона, например, Android или iOS. Подключите телефон к P C, запустите приложение на телефоне, затем запустите клиентское приложение P C, которое может просматривать видео. Приложение телефона называется "无 无 相机", а приложение P C называется "无 他 伴侣", его веб-сайт https://www.wuta-cam.com/.

. Я запускаю FFmpeg на Windows Командная строка с командой ffmpeg -list_devices true -f dshow -i dummy, список устройств в порядке. (Чтобы правильно отобразить китайский язык, заранее запустите chcp 65001.)

Запустите команду ffplay -f dshow -i video="无他伴侣(竖屏)", все в порядке. Воспроизведите видео. (Конечно, вам необходимо заранее подтвердить, что его клиент P C предварительно просматривает.)

Теперь я хочу получить декодированные кадры с этой виртуальной камеры в моей программе, я звоню avformat_open_input() с video=无他伴侣(竖屏) это не удалось, возвращаемое значение -5, ошибка ввода / вывода.

Кто-нибудь знает причину? Пожалуйста помоги. Заранее спасибо.

Ниже приведен мой фрагмент кода.

avdevice_register_all();
avcodec_register_all();
//const char * url= "video=Logitech Webcam C930e";// This is fine.
char url[] = "video=无他伴侣(竖屏)";// This is bad.

AVFormatContext *pFmtCtx = avformat_alloc_context();
AVInputFormat *iformat = av_find_input_format("dshow");
int nRet = 0;
nRet = avformat_open_input(&pFmtCtx, url, iformat, NULL);
if (nRet)
{
    const size_t buffer_size = 256;
    char err_description[buffer_size];
    av_strerror(nRet, err_description, buffer_size);
    printf("%s.\n", err_description);// --> I/O error.
    printf("FAILED to open input.(Line:%d,%d)\n",  __LINE__, nRet);
    return -1;
}

1 Ответ

1 голос
/ 09 мая 2020

FFmpeg может не обрабатывать китайские иероглифы напрямую. Если имя устройства содержит китайские чата, FFmpeg сообщит, что не может найти устройство с указанным именем. Я попробовал Windows API-функцию WideCharToMultiByte(), она работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...