FFmpeg NaCl模块avformat_open_input(在rtsp流上)返回-5:I / O错误

时间:2016-01-05 11:06:12

标签: ffmpeg rtsp google-nativeclient rtsp-client

我想在Chrome PNaCl中创建一个RTSP播放器。

我已经成功构建了ffmpeg naclport,包括ffmpeg NaCl端口的 build.sh 文件中的以下网络标志。

- 启用网络--enable-protocols --enable-demuxer = rtsp --enable-demux = rtp --enable-demuxer = sdp --enable-decoder = h264

此外,我已成功编码并在我自己的PNaCl模块中链接了ffmpeg NaCl端口。我在manifest.json文件中包含以下网络权限:

"permissions": [
{
    "socket": [
        "tcp-listen:*:*", 
        "tcp-connect:*:*", 
        "resolve-host:*:*", 
        "udp-bind:*:*", 
        "udp-send-to:*:*"
    ],
}

现在,当我运行以下代码时,在PNaCl中, avformat_open_input(...)返回-5或I / O错误

    AVFormatContext* formatContext = avformat_alloc_context();

    av_register_all();

    avformat_network_init();

    const char * stream_path = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov";

    int result = avformat_open_input(&formatContext, stream_path ,NULL,NULL);

    if(result< 0){

        PostMessage("input not opened, result: ");

        PostMessage(result);

    }else{

      PostMessage(std::string("input successfully opened"));

    }

我可能做错了什么,为什么PNaCl模块无法访问RTSP流?

PS。 This是一个类似的问题,但它没有给出明确的答案。

1 个答案:

答案 0 :(得分:0)

您是否从主线程中调用了avformat_open_input?似乎套接字操作被阻止在主线程中工作。

尝试将代码移动到后台线程,或者更好的是,使用ppapi_simple,因为这会在后台线程中自动执行代码。