最近需要参加一个比赛,主要就是使用 FPGA 获取视频发送给USRP RX进行发送,最终在接收端进行实时显示。本次记录一下在接收端进行视频的实时显示的方法与测试过程。主要流程图如下:
![](https://img-blog.csdnimg.cn/f836d9e423c54a259a79a40c50ffc079.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5L2g5Y235oiR5LiN5Y23,size_20,color_FFFFFF,t_70,g_se,x_16)
实现视频通过 USRP 发送并在接收端进行实时显示,这个过程用两个通俗的词来总结就是——直播。一般来说,由于信道带宽的限制,如果将原始视频解码为一帧帧的图像再进行发送然后在接受段显示的话就需要很大的传输带宽,一般的无线传输很难达到如此大的带宽,尤其是水声通信。因此必须传输编码后的视频流(比如mp4格式的视频)。
对于我这种没有详细研究过视频编解码的人来说,实现视频实时显示的方法当然越简单越好,最好连代码都不用写就更好了!幸好呀,这种方法真的存在(^-^)!在接收端进行视频的实时显示可以使用 VLC 播放器。下面我们看几个传输的例子:
1、音频传输
本次实验传输一个 .wav 格式的音频数据,GNU Radio 里的设置如下:
至于 UDP Sink 模块怎么用这里就省略了(放个链接,有需要的可以点进去学习下),注意 IP 地址 Address 参数的设置,可以通过 ifconfig -a 命令进行获取。然后是端口号 Destination Port 参数的设置,设置为什么随便,只要跟 VLC 中的一致就行。
下面说下 VLC 的设置,VLC 的安装命令为 sudo apt install vlc 。打开 VLC ,在菜单栏选择 Media -> Open Network Stream,就会看到如下界面:
我们在 URL 栏里填上网络地址及端口号,注意前缀为:udp/wav:// , 后面的 ip 地址及端口号要与 UDP Sink 模块中的设置一致。然后点击 Play 按钮即可等待数据的接收。
最后插上耳机并运行 GNU Radio 流图,~~~你听,多么美妙的声音~~~
注意:这里千万不要用 Throttle 模块,至于为什么,你加上去试试就知道了。
2、视频传输
目前只实现了使用 GNURadio 进行无声视频的传输,带声视频的传输方法还在研究中。过程如下:
我先把音频传输中的 VLC URL 栏里的前缀改为:udp/h264:// ,其他设置保持不变。然后使用 ffmpeg 工具(安装步骤参考链接)将手机拍摄的带声 mp4 文件转化为 h264 格式的文件,命令如下:
ffmpeg -i 36985186.mp4 -c copy test.h264
该转换方法来自:
使用ffmpeg将mp4文件转为h264文件或者264文件_soralaro的博客-CSDN博客
之后对转换后的 test.h264 文件进行传输即可,步骤同上。
目前的进展,先做个总结,后面还得鼓捣鼓捣怎么正常发送 mp4 文件在回来做个更新。