山西两学一做网站长沙必去的10个景点
2026/4/18 4:44:31 网站建设 项目流程
山西两学一做网站,长沙必去的10个景点,品牌建设的最高境界是培育客户的,京东购物商城官网文章目录一、简介二、播放文件中视频三、 播放TF卡中MP4视频文件1.开启menuconfig配置2.代码修改1#xff09;添加TF卡挂载相关代码2#xff09; mnt_init()函数修改3) mnt_init() 代码说明4#xff09;视频引用四、现象1.SD卡检测成功2.成功挂载文件系统3.打开失败4.读取成…文章目录一、简介二、播放文件中视频三、 播放TF卡中MP4视频文件1.开启menuconfig配置2.代码修改1添加TF卡挂载相关代码2 mnt_init()函数修改3) mnt_init() 代码说明4视频引用四、现象1.SD卡检测成功2.成功挂载文件系统3.打开失败4.读取成功5.开始播放一、简介黄山派播放视频例程播放文件中的mp4视频播放TF卡中视频例程源码本地视频播放二、播放文件中视频使用的例程默认播放 disk目录下的video_example.mp4 视频文件源视频文件内容为空文件直接编译使用代码是不能播放出视频的使用自己的MP4文件替换disk目录下文件后编译下载即可播放代码默认没有开启TF卡的使用三、 播放TF卡中MP4视频文件这里不使用源代码中 SDIO RT_USING_SDIO相关的代码使用前面学习的 SPI_TF RT_USING_SPI_TF1.开启menuconfig配置proj.conf文件内添加的配置CONFIG_BSP_USING_SPI1y CONFIG_BSP_SPI1_TX_USING_DMAy CONFIG_BSP_SPI1_RX_USING_DMAy CONFIG_RT_USING_SPI_MSDy2.代码修改1添加TF卡挂载相关代码#includedfs_file.h#includespi_msd.h#defineFS_ROOTroot#defineFS_ROOT_PATH///统一根目录路径为 /#defineFS_ROOT_OFFSET0X00000000//起始地址#defineFS_ROOT_LEN500*1024*1024//500M#defineFS_BLOCK_SIZE0x200structrt_device*fal_mtd_msd_device_create(char*name,longoffset,longlen){rt_device_tmsdrt_device_find(sd0);if(msdNULL){rt_kprintf(Error: the flash device name (sd0) is not found.\n);returnNULL;}structmsd_device*msd_dev(structmsd_device*)msd-user_data;structmsd_device*msd_file_dev(structmsd_device*)rt_malloc(sizeof(structmsd_device));if(msd_file_dev){msd_file_dev-parent.typeRT_Device_Class_MTD;#ifdefRT_USING_DEVICE_OPSmsd_file_dev-parent.opsmsd_dev-parent.ops;#elsemsd_file_dev-parent.initmsd_dev-parent.init;msd_file_dev-parent.openmsd_dev-parent.open;msd_file_dev-parent.closemsd_dev-parent.close;msd_file_dev-parent.readmsd_dev-parent.read;msd_file_dev-parent.writemsd_dev-parent.write;msd_file_dev-parent.controlmsd_dev-parent.control;#endifmsd_file_dev-offsetoffset;msd_file_dev-spi_devicemsd_dev-spi_device;msd_file_dev-geometry.bytes_per_sectorFS_BLOCK_SIZE;msd_file_dev-geometry.block_sizeFS_BLOCK_SIZE;msd_file_dev-geometry.sector_countlen;rt_device_register(msd_file_dev-parent,name,RT_DEVICE_FLAG_RDWR|RT_DEVICE_FLAG_REMOVABLE|RT_DEVICE_FLAG_STANDALONE);rt_kprintf(fal_mtd_msd_device_create dev:sd0 part:%s offset:0x%x, size:0x%x\n,name,msd_file_dev-offset,msd_file_dev-geometry.sector_count);returnRT_DEVICE(msd_file_dev-parent);;}returnNULL;}#includedfs_file.h#includespi_msd.h2 mnt_init()函数修改#ifndefFS_REGION_START_ADDR#errorNeed to define file system start address!#endifintmnt_init(void){char*name[2];rt_kprintf(auto_mnt_init\n);uint16_ttime_out100;while(time_out--){rt_thread_mdelay(30);if(rt_device_find(sd0))break;}memset(name,0,sizeof(name));name[0]sd0;fal_mtd_msd_device_create(FS_ROOT,FS_ROOT_OFFSET9,FS_ROOT_LEN9);/* 挂载 FS_ROOT挂载路径 FS_ROOT_PATH挂载类型 elm */if(dfs_mount(FS_ROOT,FS_ROOT_PATH,elm,0,0)0)// fs exist{rt_kprintf(mount fs on flash to root success\n);}else{// auto mkfs, remove it if you want to mkfs manualrt_kprintf(mount fs on flash to root fail\n);if(dfs_mkfs(elm,FS_ROOT)0)//Format file system{rt_kprintf(make elm fs on flash sucess, mount again\n);if(dfs_mount(FS_ROOT,/,elm,0,0)0)rt_kprintf(mount fs on flash success\n);else{rt_kprintf(mount to fs on flash fail\n);returnRT_ERROR;}}elsert_kprintf(dfs_mkfs elm flash fail\n);}// #ifdef RT_USING_SDIO// //Waitting for SD Card detection done.// int sd_state mmcsd_wait_cd_changed(3000);// if (MMCSD_HOST_PLUGED sd_state)// {// rt_kprintf(SD-Card plug in\n);// name[0] sd0;// }// else// {// rt_kprintf(No SD-Card detected, state: %d\n, sd_state);// }// #endif /* RT_USING_SDIO */name[1]flash0;register_mtd_device(FS_REGION_START_ADDR,FS_REGION_SIZE,name[1]);for(uint32_ti0;isizeof(name)/sizeof(name[0]);i){if(NULLname[i])continue;if(dfs_mount(name[i],/,elm,0,0)0)// fs exist{rt_kprintf(mount fs on %s to root success\n,name[i]);break;}else{rt_kprintf(mount fs on %s to root fail\n,name[i]);}}returnRT_EOK;}INIT_ENV_EXPORT(mnt_init);3) mnt_init() 代码说明注册并将FS_ROOT挂载到’/‘目录下挂载类型为 ‘elm’fal_mtd_msd_device_create(FS_ROOT,FS_ROOT_OFFSET9,FS_ROOT_LEN9);/* 挂载 FS_ROOT挂载路径 FS_ROOT_PATH挂载类型 elm */if(dfs_mount(FS_ROOT,FS_ROOT_PATH,elm,0,0)0)// fs exist{rt_kprintf(mount fs on flash to root success\n);}else{// auto mkfs, remove it if you want to mkfs manualrt_kprintf(mount fs on flash to root fail\n);if(dfs_mkfs(elm,FS_ROOT)0)//Format file system{rt_kprintf(make elm fs on flash sucess, mount again\n);if(dfs_mount(FS_ROOT,/,elm,0,0)0)rt_kprintf(mount fs on flash success\n);else{rt_kprintf(mount to fs on flash fail\n);returnRT_ERROR;}}elsert_kprintf(dfs_mkfs elm flash fail\n);}源代码中的挂载文件系统函数如果根目录下已经挂载了文件系统后续文件系统则视为挂载失败所以使用了这里使用了SD卡中的视频文件后就不能使用代码中的视频文件了。for(uint32_ti0;isizeof(name)/sizeof(name[0]);i){if(NULLname[i])continue;if(dfs_mount(name[i],/,elm,0,0)0)// fs exist{rt_kprintf(mount fs on %s to root success\n,name[i]);break;}else{rt_kprintf(mount fs on %s to root fail\n,name[i]);}}4视频引用将 VIDEO_SRC 数组下的文件名称改为SD卡下的存放的mp4文件名称mp4文件存放在SD卡的根目录下。或者直接修改filename完成后编译下载即可播放TF卡中的视频文件四、现象正常即可播放TF卡中的视频文件1.SD卡检测成功2.成功挂载文件系统3.打开失败这里可以看到local.mp4是TF卡中没有的视频名称所以自然也是打开失败ret返回的值为-2这里ret等于0说明成功获取到视频了ret小于0就是失败了4.读取成功可以看到成功读取到视频 ret0 而且会返回视频的数据信息5.开始播放

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询