第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中,就能在帧缓冲区中看到正常播放的视频了。

浙公网安备 33010602011771号