音视频流媒体开发【一】开发环境搭建二:Windows 10

音视频流媒体开发-目录
iOS知识点-目录
Android-目录
Flutter-目录
数据结构与算法-目录
uni-pp-目录

1. FFmpeg命令行环境搭建

FFMPEG官网:http://ffmpeg.org/

1. 1下载4.2.1版本源码

源码:https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2

1.2 下载4.2.1编译好的文件

下载已经编译好的FFMPEG,因为官方的链接已经不维护,所以这里我们从音视频VIP群文件进行下载,群文件提供的是32bit版本(API和64bit是一样的)

文件说明:
  • Shared:ffmpeg-4.2.1-win32-shared.zip 包含FFMPEG的dll库文件
  • Dev:ffmpeg-4.2.1-win32-dev.zip包含FFMPEG的lib文件/头文件,以及example范例。

  • Static:ffmpeg-4.2.1-win32-static.zip 包含了FFMPEG的官方文档

两种lib的区别

静态库(.lib)

  • 函数和数据被编译进一个二进制文件(通常扩展名为.lib)。
  • 在使用静态库的情况下,在编译链接可执行文件时,链接库从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)
  • 当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库

动态库(.lib和.dll)

  • 在使用动态库的时候,编译后往往提供两个文件:一个引入库(.lib)文件(也称“导入库文件”)和一个DLL(.dll)文件。当然到了后面会告诉你如果只提供一个DLL文件,使用显示连接的方式也可以调用,只是稍加麻烦而已。
  • 虽然引入库的后缀名也是“lib”,但是,动态库的引入库文件和静态库文件有着本质的区别。对于一个dll文件来说,其引入库文件(.lib)包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。

我们目前主要是使用32位的版本。

注意:有其他链接机构提供了编译好的64bit版本,该链接仅供参考,大家先使用我们提供的32bit版本进行学习。

1. https://www.gyan.dev/ffmpeg/builds/#release-builds

不同release的区别:


  • libraries in essentials build

avisynth+ libaom libass libfreetype libfribidi libgme libgsm libmp3lame libopencore-amrnb libopencore-amrwb libopenjpeg libopenmpt libopus librubberband libspeex libsrt libssh libtheora libvidstab libvmaf libvo-amrwbenc libvorbis libvpx libwebp libx264 libx265 libxvid libzimg libzmq mediafoundation sdl2

  • additional libraries in full build

chromaprint frei0r ladspa libbluray libbs2b libcaca libcdio libdav1d libdavs2 libflite libilbc libjxl liblensfun libmodplug libmysofa libplacebo librav1e librist libshaderc libshine libsnappy libsoxr libsvtav1 libtwolame libuavs3d libxavs2 libzvbi opencl vulkan

  • hardware-support libraries in all builds

amf cuda cuvid d3d11va dxva2 libmfx nvdec nvenc

2.https://github.com/BtbN/FFmpeg-Builds/releases提供的是64bit的

gpl 包括所有依赖项,甚至那些需要完整 GPL 而不仅仅是 LGPL 的依赖项。

lgpl 缺少仅 GPL 的库。最突出的是 libx264 和 libx265。

gpl-shared 与 gpl 相同,但带有 libav* 系列共享库而不是纯静态可执行文件。

lgpl-shared 再次相同,但具有 lgpl 依赖项集。

如果要从该链接下载编译好的库,建议下载

1.3 FFmpeg命令行环境搭建

解压ffmpeg-4.2.1-win32-shared.zip

1. 拷贝可执行文件到C:\Windows

2. 拷贝动态链接库到C:\Windows\SysWOW64

WoW64 (Windows On Windows64 [1] )是一个Windows操作系统的子系统,被设计用来处理许多在32-bit Windows和64-bit Windows之间的不同的问题,使得可以在64-bit Windows中运行32-bit程序。

解压SDL2

解压SDL2-2.0.10.rar

把SDL2.dll也拷贝到C:\Windows\SysWOW64目录

3.打开cmd命令行窗口

输入ffmpeg -version测试,打印版本号4.2.1即可。

对于命令行实战中遇到FFmpeg版本号不同的时候不用担心,之前录制FFmpeg命令行实战的时候最新的版本是4.1,现在用4.2.1版本测试是没有任何问题。

2. VS2015安装

第三方下载:http://www.xz7.com/downinfo/202013.html

Enterprise: HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

设置环境变量

D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

如果在命令行输入cl提示找不到,在环境变量写为:
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\Hostx64\x64

其他版本,比如vs2019
设置环境变量: 系统属性 -> 高级 -> 环境变量
PATH对应:
C:\Program Files (x86)\Microsoft Visual tudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64

3. QT 5.10安装

下载版本:QT版本 5.10.1
下载地址:http://download.qt.io/official_releases/qt/5.10/5.10.1/

选择该版本


直接下载地址:http://iso.mirrors.ustc.edu.cn/qtproject/archive/qt/5.10/5.10.1/qt-opensource-windows-x86-5.10.1.exe

下载地址:

Running Windows Runtime device detection.
No winrtrunner.exe found.
Project ERROR: Cannot run compiler 'cl'. Output:
===================
===================
Maybe you forgot to setup the environment?
Error while parsing file C:\Users\32687\Documents\qt-c\qt-c.pro. Giving up.
Project ERROR: Cannot run compiler 'cl'. Output:
===================
===================
Maybe you forgot to setup the environment?
Error while parsing file D:\0voice\av_media\qt\qt-c\qt-c.pro. Giving up.

3.1 安装CDB调试器步骤(MSVC编译器调试用)

先关闭Qt Creator
msvc编译器使用windbg下的cdb调试器 所以需要安装windbg
官网下载链接:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools

Qt Creator 安装SDK,在MSVC编译模式下使用CDB调试器
https://www.cnblogs.com/lixuejian/p/12915174.html

一定要安装好该调试器才能 MSVC2015 32bit/64bit才能调试。

3.2 直接使用FFmpeg官方编译的库

刚打开QT Creator的界面

2 新建工程

3 选择Non-Qt Project

4 填写项目名称以及路径,如下所示就创建了一个叫ffmpeg-version的工程。

到此创建了一个基本的工程。

注意:需要使用C++时则选择

引用FFMPEG库

将ffmpeg-4.2.1-win32-dev拷贝到ffmpeg-version目录下

在ffmpeg-version.pro里面添加ffmpeg头文件和库文件路径


即是

win32  {
INCLUDEPATH  +=  $$PWD/ffmpeg-4.2.1-win32-dev/include
LIBS  +=  $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/avcodec.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/avdevice.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/avfilter.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/avutil.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/postproc.lib \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/swresample.lib  \
          $$PWD/ffmpeg-4.2.1-win32-dev/lib/swscale.lib
}

LIBS的多行引用一定要记得带斜杠,否则后续的引用无效。

修改main.c文件

#include  <stdio.h> //  包含ffmpeg头文件
#include  "libavutil/avutil.h" 
int  main() { 
     printf("Hello  FFMPEG,  version  is  %s\n",  av_version_info());  return  0;
}

执行程序

显示 Hello FFMPEG, version is 4.2.1

如果不能正常运行则是因为没有ffmpeg库对应的 dll:



4. Windows编译FFmpeg

4.1 编译环境

MSYS2 (Minimal SYStem 2)是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin(POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件。

MSYS2 是MSYS的一个升级版,准确的说是集成了panman和Mingw-64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了Arch linux的软件包管理系统Pacman(其实是与Cygwin的区别)。

  1. 下载安装MSYS2(按照官网安装到自己指定的目录下,本人安装于D:/msys64)
  2. 安装完成之后,先把安装目录下的msys2_shell.cmd中注释掉的rem set MSYS2_PATH_TYPE=inherit改成set MSYS2_PATH_TYPE=inherit,这是为了将vs的环境继承给MSYS2。

MSYS2可以选择msys或者MinGW-w64环境来编译,不过在msys下使用gcc编译出来的exe和dll依赖msys-2.0.dll,而MinGW-w64下编译出来的文件不需要依赖这个dll,从程序的运行效率来看,不依赖这个dll的程序的效率应该更高。所以选择MinGW-w64来编译更佳。

下载地址:https://www.msys2.org/

4.2 修改pacman的源

pacman是一个软件包管理器,用来在MSYS2中安装软件,但是默认的国外的源下载安装包时非常缓慢,大概只有十几二十KB的速度,而且还容易下载中断出错,所以需要修改为国内源,国内源可以选择中科大的源。

按照MSYS2镜像提示修改。具体如下:


注意:是在文件夹打开文件进行编辑,不是在shell窗口编辑。

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/

编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

3.启动命令行窗口,在窗口中输入:

#进入msys2安装目录
D:
cd  D:\msys64
#如果要打开msys2的mingw64窗口
msys2_shell.cmd -mingw64
#如果要打开msys2的msys窗口
#msys2_shell.cmd

然后在msys2的shell中执行:

pacman -Sy

刷新软件包数据。


4.3 安装编译环境

gcc编译器、git等

msys2 遇到两类开发环境:

  1. MSYS2 自带的开发环境,安装的包叫 msys2-devel
  2. MinGW-w64 的安装

这两者有什么区别呢?
一言以蔽之,前者编译出来的可执行文件,要依赖 MSYS2 提供的动态链接库,而后者不需要。下面详细说明一下:
(1) MSYS2 下的 gcc 编译环境,编译的可执行文件要依赖于 msys-2.0.dll,这个 DLL 提供了 Linux 下编程的提供的函数和接口,例如 fork 函数。
这个编译环境对于编译基于 Linux 下编写的软件,是非常适合的。例如编译 GNU 提供的各种工具。例如,你想编译最新版本的 GNU grep 工具,MSYS2 下的这个环境是非常适合的。
(2)用 MinGW64 的编译环境,不再依赖于 msys-2.0.dll,如果源代码就是基于 windows 开发的,那使用 MinGW 的编译环境比较好,编译出来的可执行文件,不用再依赖 MSYS 提供的动态链接库。当然,前提是代码中不能使用 Linux 的东西,即 POSIX 的那套东西。

4.3.1安装mingw-w64

要先修改 msys64\etc\pacman.conf(大概39行),修改后:

SigLevel = Never
#SigLevel = Required DatabaseOptional

这里我们只用MinGW

如果选择MinGW-w64编译则打开MSYS2 MinGW64,在shell窗口中输入:

pacman -S mingw-w64-x86_64-toolchain

然后默认全部安装即可(直接回车)。

而如果选择msys编译则打开MSYS2 MSYS2,在shell窗口中输入:

pacman -S msys2-devel
或者 
pacman -S make gcc diffutils pkg-config

然后默认全部安装即可。

4.3.2 安装git

安装git:任一方式打开shell窗口输入:

pacman -S git

4.3.3 安装make等工具

pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S  pkg-config
如果需要编译出ffplayer的话,还需要安装SDL
pacman -S mingw-w64-x86_64-SDL2

4.4 编译环境的其他准备工作

1.重命名link.exe

重命名msys64/usr/bin/link.exemsys64/usr/bin/link.bak, 避免和MSVC 的link.exe抵触。

2.启动命令行窗口,在窗口中输入:

#进入msys2安装目录
D:
cd  D:\msys64
#如果要打开msys2的mingw64窗口
msys2_shell.cmd -mingw64
#如果要打开msys2的msys窗口
#msys2_shell.cmd

3.下载和安装YASM

pacman -S yasm

4.检查编译环境工具

mingw64的shell窗口输入:

which cl link yasm cpp

看返回结果,没有no的结果一般就没问题。


5.修改支持中文显示

窗口右键->Options->Text,然后locale选择:zh_CN,Character set 选择 UTF-8。

6.安装nasm

编译当前最新x264时需要用到nasm。

pacman -S nasm

4.5 编译第三方库

4.5.1 下载和编译x264

1.1。MinGW-w64版本

下载x264或者使用

将下载下的放置于/home/32687/ffmpeg,把第三方库编译的库文件放在 /home/32687/ffmpeg/build

git clone http://git.videolan.org/git/x264.git
或者用码云的链接
git clone https://gitee.com/mirrors_addons/x264.git

cd进入x264目录下:

./configure --prefix=/home/32687/ffmpeg/build/libx264 --host=x86_64-w64-mingw32   --enable-static  --extra-ldflags=-Wl,--output-def=libx264.def 
make
make install

2.生成libx264.lib
上面编译出来的结果没有包含lib文件,需要自己手工生成。
configure时我们生成了libx264.def此时就派上用场。

cp ./libx264.def /home/32687/ffmpeg/build/libx264/lib/
cd /home/32687/ffmpeg/build/libx264/lib
#若要生成64位lib文件则输入如下命令:
lib /machine:X64 /def:libx264.def
#若要生成32位lib文件则输入如下命令:
#lib /machine:i386 /def:libx264.def

即得到libx264``.lib,然后将/home/32687/ffmpeg/build/libx264/bin/libx264-161.dll (具体名字和x264版本有关)改名或者复制一份为libx264.dll

如果想在程序中直接使用x264的话,将include中的.h头文件、libx264.liblibx264.dll复制到项目中对应位置,并且在程序中添加头文件,然后就可以使用x264中的方法了。

加上

./configure --prefix=/home/32687/ffmpeg/build/libx264 --host=x86_64-w64-mingw32  --enable-shared  --enable-static  --extra-ldflags=-Wl,--output-def=libx264.def

libx264官网下载
https://www.videolan.org/developers/x264.html

4.5.2 下载和编译fdk-aac

下载fdk-aac

git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac/

编译fdk-aac

./autogen.sh
./configure --prefix=/home/32687/ffmpeg/build/libfdk-aac --enable-static --enable-shared
make -j4
make install

查看是否编译成功

动态库
$ find -name *.dll
./.libs/libfdk-aac-2.dll

静态库
$ find -name *.a
./.libs/libfdk-aac.a
./.libs/libfdk-aac.dll.a

libfdk_aac官网下载
https://sourceforge.net/projects/opencore-amr/files/fdk-aac/

4.5.3 下载编译mp3

下载

git clone --depth  1  https://gitee.com/hqiu/lame.git

编译

./configure --prefix=/home/32687/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make -j4
make install

查找.a静态库

$ find -name *.a 
./libmp3lame/.libs/libmp3lame.a
./libmp3lame/vector/.libs/liblamevectorroutines.a
./mpglib/.libs/libmpgdecoder.a

去查看一下

alang@AlanGe MINGW64 /home/32687/ffmpeg/lame
$ cd ..

alang@AlanGe MINGW64 /home/32687/ffmpeg
$ cd build/

alang@AlanGe MINGW64 /home/32687/ffmpeg/build
$ ls
libfdk-aac  libmp3lame  libx264

alang@AlanGe MINGW64 /home/32687/ffmpeg/build
$ cd libmp3lame/

alang@AlanGe MINGW64 /home/32687/ffmpeg/build/libmp3lame
$ ls
include  lib  share

alang@AlanGe MINGW64 /home/32687/ffmpeg/build/libmp3lame
$ cd lib/

alang@AlanGe MINGW64 /home/32687/ffmpeg/build/libmp3lame/lib
$ ls
libmp3lame.a  libmp3lame.la

libmp3lame官网下载(选择版本>= 3.98.3
https://sourceforge.net/projects/lame/files/lame/

4.5.4 下载编译libvpx

git clone --depth  1  https://github.com/webmproject/libvpx.git

cd libvpx

./configure --prefix=/home/32687/ffmpeg/build/libvpx --disable-examples  --disable-unit-tests  --enable-vp9-highbitdepth  --as=yasm

make -j4

make install

4.6 下载和编译ffmpeg

1.下载ffmpeg

git clone git://source.ffmpeg.org/ffmpeg.git
或者码云的链接
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
# 查看版本
git branch -a
# 选择4.2版本
git checkout remotes/origin/release/4.2

git checkout remotes/origin/release/4.2

由于ffmpeg比较大,更好的选择官网下载ffmpeg。

2.编译ffmpeg

创建一个build.sh

将下载好的ffmpeg与x264放在一个目录下,本人是/home/32687/ffmpeg。

build_ffmpeg.sh内容是:

./configure \
    --prefix=/home/32687/ffmpeg/build/ffmepg-4.2 \
    --arch=x86_64 \
    --enable-shared \
    --enable-gpl \
    --enable-libfdk-aac \
    --enable-nonfree  \
    --enable-libvpx \
    --enable-libx264 \
    --enable-libmp3lame \
    --extra-cflags="-I/home/32687/ffmpeg/build/libfdk-aac/include" \
    --extra-ldflags="-L/home/liaoqingfu/build/libfdk-aac/lib" \
    --extra-cflags="-I/home/liaoqingfu/build/libvpx/include" \
    --extra-ldflags="-L/home/liaoqingfu/build/libvpx/lib"   \
    --extra-cflags="-I/home/liaoqingfu/build/x264/include" \
    --extra-ldflags="-L/home/liaoqingfu/build/x264/lib" \
    --extra-cflags="-I/home/liaoqingfu/build/libmp3lame/include" \
    --extra-ldflags="-L/home/liaoqingfu/build/libmp3lame/lib"

执行:

sh build_ffmpeg.sh

然后

make -j8
make install

测试
拷贝一个MP4文件到bin目录下,用ffplay播放

$ ffplay.exe believe.mp4 -x 800 -y 480

4.7 MinGW与MSVC编译的区别

首先,MSVC是指微软的VC编译器,需要安装微软的VS软件,若是感觉软件比较庞大,可以安装visualcppbuildtools_full,不过也很大哈!

然后,MinGW是指是Minimalist GNU on Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库。感觉跨平台型更好呢

二:设置环境变量继承自Windows

找到msys2_shell.cmd中的

rem set MSYS2_PATH_TYPE=inherit

去掉rem,取消这一句的注释,使MSYS2的环境变量继承自系统

5 QT使用MSVC2015 64bit调用我们编译的ffmpeg库

xxx.pro范例

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
    main.c

INCLUDEPATH +=  \
     $$PWD/ffmepg-4.2/include
LIBS += $$PWD/ffmepg-4.2/bin/avformat.lib   \
        $$PWD/ffmepg-4.2/bin/avcodec.lib    \
        $$PWD/ffmepg-4.2/bin/avdevice.lib   \
        $$PWD/ffmepg-4.2/bin/avfilter.lib   \
        $$PWD/ffmepg-4.2/bin/avutil.lib     \
        $$PWD/ffmepg-4.2/bin/swresample.lib \
        $$PWD/ffmepg-4.2/bin/swscale.lib

测试文件

#include <stdio.h>
 
// 包含ffmpeg头文件
#include "libavutil/avutil.h"
 
int main()
{
    printf("Hello FFMPEG, version is %s\n", av_version_info());
 
    return 0;
}
5.QT使用MSVC2015 64bit调用我们编译的ffmpeg库
(1)进到ffmpeg编译目录,先把需要的dll都放到对应bin目录,怎么把需要的dlI找出来呢?就是执行ffplay/ffmpeg/ffprobe
   D:\Ovoicelav_media\ffmpeg_windows\ffmpeg_clffmepg-4.2\bin
   缺什么,就用Everything搜索,拷贝到上面那个目录
(2)把ffmpeg-4.2拷贝到我们工程目录
(3)修改工程的pro文件,添加头文件和库文件支持
(4)修改main.c,一定要把build-xoox-Debug目录的过程文件先删除,否则出现"libavutil/avutil.h"找不到的情况
(5)把\ffmepg-4.2\bin下面的所有d川拷贝到build-xxx-Debug目录
   dll包括ffmpeg的,也包括其他第三方的(步骤1收集到的dll)
(6)才能正常运行和debug程序

编译32bit参考

https://www.pianshen.com/article/67241334192/

或者MINGW-w64 32位开发工具链的安装

pacman -Syu mingw-w64-i686-toolchain

pacman -S msys/gcc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容