我想在Chrome PNaCl中创建一个RTSP播放器。
我已经成功地为ffmpeg NaCl端口构建了ffmpeg naclport,包括build.sh文件中的以下网络标志。
--启用网络--启用协议--启用解复用器=rtsp--启用解多路复用器=rtp--启用去复用器=sdp--启用解码器=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。这是一个类似的问题,但没有给出明确的答案
您是从主线程调用avformat_open_input
吗?套接字操作似乎被阻止在主线程中工作。
尝试将代码移动到后台线程,或者更好的是,使用ppapi_simple,因为它会自动在后台线程中执行代码。