如何解码播放内存Buffer中的视频数据
情况是这样的:
设备端采用Udp组播方式发送视频数据(只有视频数据,没有音频数据,不需要demux);
数据组包格式是自定义的,有在数据前添加自定义的包头(不是标准RTSP、RTP),编码方式是Xvid Mpeg-4;
服务端在收到数据后解包获得视频数据,目前将获得数据存储为硬盘中的文件,使用vlc是可以播放的。
需求:
需要实时播放接收到的数据。
方案1:接收后立即写入文件,不停地接收不停地写入,延时500ms调用vlc进行播放。
问题:vlc播放1-2秒后卡住,之后就不再播放。文件大小继续增长,手动使用vlc打开该文件则可继续播放。
猜测:vlc的access层应该一次会读取一定大小的文件到buffer中,然后demux和decode层解析,access层同时继续读取指定大小的文件,而文件的写入速度小于vlc的读取速度,导致vlc的access层判定已经将文件全部读取完了,于是不再读取。
请教:是否可以更改vlc每次读取的大小或者读取的速度?
方案2:将接收到的数据每帧每帧地传给解码器,解码器返回解码结果,再将解码结果显示出来。
问题: 因为使用Windows平台开发,目前似乎ffmpeg和direcctshow这两种技术都可以用,但是ffmpeg和directshow都将文件访问层封装了,解码传参都是传string(文件名或者url)。
请教:如何传入每帧的byte数组(不是结构体,是byte数组)给解码器?解码器解码后的结果如何进行播放?Windows平台使用MediaPlayer作为播放器时,传入参数也是string。
小弟初学视频解码,望各位大大不吝赐教!目前习惯使用的是C#,C++代码也看得懂,谢谢!