第23章 录放视频
第二十三章 录放视频
我们先录制,再播放视频。在录制视频时会同步录制音频(用板载的贴片麦克风),大家在播放视频时把耳机连接到3.5mm耳机接口就可以听到当前录制的声音了。
1. 录制视频
from media.mp4format import *
import os
width = 800
height = 480
file_name = "/data/test.mp4"
MAX_RECORD_TIME = 30 # 设置默认录制时间(单位:秒)
def mp4_muxer_test():
print("mp4_muxer_test start")
mp4_muxer = Mp4Container() # 实例化mp4 container
mp4_cfg = Mp4CfgStr(mp4_muxer.MP4_CONFIG_TYPE_MUXER)
if mp4_cfg.type == mp4_muxer.MP4_CONFIG_TYPE_MUXER:
mp4_cfg.SetMuxerCfg(file_name, mp4_muxer.MP4_CODEC_ID_H265, width, height, mp4_muxer.MP4_CODEC_ID_G711U)
mp4_muxer.Create(mp4_cfg) # 创建mp4 muxer
mp4_muxer.Start() # 启动mp4 muxer
start_time_ms = time.ticks_ms() # 记录开始时间
elapsed_time = 0
frame_count = 0
try:
while True:
os.exitpoint()
# 处理音视频数据,按MP4格式写入文件
mp4_muxer.Process()
frame_count += 1
print("frame_count = ", frame_count)
# 检查当前时间与开始时间的差值是否超过最大录制时间
elapsed_time = time.ticks_ms() - start_time_ms
if elapsed_time >= MAX_RECORD_TIME*1000:
print("录制已超过最大时长,停止录制,请等待视频保存")
break
except BaseException as e:
print(e)
# 停止mp4 muxer
mp4_muxer.Stop()
# 销毁mp4 muxer
mp4_muxer.Destroy()
print("mp4_muxer_test stop,video saved!")
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
mp4_muxer_test()
修改width
和height
可以改变录制视频的宽度和高度,file_name
可以改变存储路径(如果你要保存的文件夹没有被创建,记得要先创建,这里的data目录是和sdcard目录同级的),修改MAX_RECORD_TIME
可以改变录制视频的长度,默认是录制30s的视频。
接下来,通过mp4_muxer_test
这个自定义函数来进行视频的录制。函数中首先创建了一个Mp4Container
对象,用来处理视频文件的生成和格式化。然后,配置视频的编码格式和参数,并启动视频录制。
录制过程通过一个while
循环持续进行,每次循环都会处理音视频数据并将其写入MP4文件。在循环中,通过time.ticks_ms()
获取当前时间,并与开始录制时的时间进行比较。当录制时间超过设定的最大时长(30秒)时,程序会输出提示信息并跳出循环,停止录制。
最后,录制停止后,调用mp4_muxer.Stop()
和mp4_muxer.Destroy()
来停止并销毁视频处理对象,表示录制已结束,视频文件已保存。这一段的时间可能会比较长,大家一定要看到串行终端打印出mp4_muxer_test stop,video saved!
后再停止程序运行及断电。
2. 播放视频
from media.player import *
import os
start_play = False # 播放结束flag
def player_event(event, data):
global start_play
if event == K_PLAYER_EVENT_EOF: # 播放结束标识
start_play = False # 设置播放结束标识
def play_mp4_test(filename):
global start_play
player=Player() # 创建播放器对象
player.load(filename) # 加载mp4文件
player.set_event_callback(player_event) # 设置播放器事件回调
player.start() # 开始播放
start_play = True
# 等待播放结束
try:
while start_play:
time.sleep(0.1)
os.exitpoint()
except KeyboardInterrupt as e:
print("user stop: ", e)
except BaseException as e:
sys.print_exception(e)
player.stop() # 停止播放
print("play over")
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
play_mp4_test("/data/test.mp4") # 播放mp4文件
将上面的程序复制到IDE中,就能在帧缓冲区中看到正常播放的视频了。
本文作者:hazy1k
本文链接:https://www.cnblogs.com/hazy1k/p/18739222
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具